left join 和 left outer join 的区别

left join \ right join \ inner join 详解通俗的讲:

   left join \ right join \ inner join 详解  A   left   join   B   的连接的记录数与A表的记录数同

   left join \ right join \ inner join 详解  A   right   join   B   的连接的记录数与B表的记录数同

     left join \ right join \ inner join 详解  A   left   join   B   等价B   right   join   A

table   A: 

    Field_K,   Field_A

   left join \ right join \ inner join 详解  1                       a

   left join \ right join \ inner join 详解  3                       b

   left join \ right join \ inner join 详解  4                       c

 table   B: 

  left join \ right join \ inner join 详解  Field_K,   Field_B

   left join \ right join \ inner join 详解  1                  x 

  left join \ right join \ inner join 详解   2                  y

   left join \ right join \ inner join 详解  4                  z

select   a.Field_K,   a.Field_A,   b.Field_K,   b.Field_B   left join \ right join \ inner join 详解  

from   a   left   join   b   

on   a.Field_K=b.Field_K   left join \ right join \ inner join 详解    left join \ right join \ inner join 详解 

 Field_K         Field_A         Field_K         Field_B           left join \ right join \ inner join 详解 

 ----------   ----------   ----------   ----------     left join \ right join \ inner join 详解  

1                     a                     1                     x                     left join \ right join \ inner join 详解  

3                     b                     NULL               NULL   left join \ right join \ inner join 详解  

4                     c                     4                     z                     left join \ right join \ inner join 详解    left join \ right join \ inner join 详解  

select   a.Field_K,   a.Field_A,   b.Field_K,   b.Field_B   left join \ right join \ inner join 详解  

from   a   right   join   b   on   a.Field_K=b.Field_K   left join \ right join \ inner join 详解    left join \ right join \ inner join 详解  

Field_K         Field_A         Field_K         Field_B           left join \ right join \ inner join 详解 

 ----------   ----------   ----------   ----------     left join \ right join \ inner join 详解  

1                     a                     1                     x                     left join \ right join \ inner join 详解  

NULL               NULL               2                     y                     left join \ right join \ inner join 详解  

4                     c                     4                     z      

--

left join \ right join \ inner join 详解举个例子:   left join \ right join \ inner join 详解  
假设a表和b表的数据是这样的。
   left join \ right join \ inner join 详解  a                         b
       id     name  id     stock
      1  a             1         15
   left join \ right join \ inner join 详解  2      b             2         50
   left join \ right join \ inner join 详解  3      c                   left join \ right join \ inner join 详解    left join \ right join \ inner join 详解  
select   *   from   a   inner   join   b   on   a.id=b.id
   left join \ right join \ inner join 详解  这个语法是连接查询中的内连接,它产生的结果是
   left join \ right join \ inner join 详解  两个表相匹配的记录出现在结果列表中。
   left join \ right join \ inner join 详解  根据上面的表,出现的结果是这样的
   left join \ right join \ inner join 详解  a.id     name     b.id     stock
   left join \ right join \ inner join 详解  1       a             1         15
   left join \ right join \ inner join 详解  2             b             2         50
   left join \ right join \ inner join 详解  ----------------------------
   left join \ right join \ inner join 详解  select   *   from   a,b   where   a.id=b.id
   left join \ right join \ inner join 详解  这个语法是内连接的另外一种写法,其执行结果与inner   join   一样
   left join \ right join \ inner join 详解    left join \ right join \ inner join 详解  -------------------------------- 
    left join \ right join \ inner join 详解    left join \ right join \ inner join 详解  select   *   from   a   left/right   join   b   on   a.id=b.id
   left join \ right join \ inner join 详解  这个是外连接语法中的左外连接或右外连接
   left join \ right join \ inner join 详解  如果是左外连接的话,它将显示a表的所有记录,
   left join \ right join \ inner join 详解  select   a.*,b.*   from   a   left   join   b   on   a.id=b.id 
  left join \ right join \ inner join 详解  查询的结果是这样的:
   left join \ right join \ inner join 详解  a.id     name     b.id     stock
   left join \ right join \ inner join 详解  1         a         1             15
   left join \ right join \ inner join 详解  2               b         2             50
   left join \ right join \ inner join 详解  3               c       null         null
    left join \ right join \ inner join 详解  --------------------------------------------
   left join \ right join \ inner join 详解  如果是右外连接的话,它将显示b表的所有记录,
   left join \ right join \ inner join 详解  select   a.*,b.*   from   a   right   join   b   on   a.id=b.id
   left join \ right join \ inner join 详解  查询的结果是这样的:
   left join \ right join \ inner join 详解  a.id     name     b.id     stock
   left join \ right join \ inner join 详解  1         a         1             15
   left join \ right join \ inner join 详解  2               b         2             50   

--

left join \ right join \ inner join 详解select   a.*,b.*   from   a   left   join   b   on   a.k   =   b.k
  select   a.*,b.*   from   a   left   outer   join   b   on   a.k   =b.k   left join \ right join \ inner join 详解  
----------上面两种一样left   join是left   outer   join的简写   left join \ right join \ inner join 详解 
 select   a.*,b.*   from   a   left   inner   join   b   on   a.k   =   b.k     left join \ right join \ inner join 详解  
没有这种写法,错误的语句.

--

left join \ right join \ inner join 详解在你要使用多个left   join的时候   left join \ right join \ inner join 详解  
比如说10个   left join \ right join \ inner join 详解  
我们把10个全都写成left   join的形式   left join \ right join \ inner join 详解  
然后再SQL让他自动运行一下,它会把最后一次出现的left   join变成left   outer   join   left join \ right join \ inner join 详解  
所以依此推理,最后一个left   join会以left   outer   join的形式存在   left join \ right join \ inner join 详解  
当然,不管变不变对结果的显示没有任何影响   left join \ right join \ inner join 详解  
希望我的实验能对你有所帮助   

--

left join \ right join \ inner join 详解使用关系代数合并数据 left join \ right join \ inner join 详解
1 关系代数 left join \ right join \ inner join 详解
合并数据集合的理论基础是关系代数,它是由E.F.Codd于1970年提出的。
left join \ right join \ inner join 详解在关系代数的形式化语言中:
left join \ right join \ inner join 详解        用表、或者数据集合表示关系或者实体。
left join \ right join \ inner join 详解        用行表示元组。
left join \ right join \ inner join 详解        用列表示属性。
left join \ right join \ inner join 详解关系代数包含以下8个关系运算符
left join \ right join \ inner join 详解        选取――返回满足指定条件的行。
left join \ right join \ inner join 详解        投影――从数据集合中返回指定的列。
left join \ right join \ inner join 详解        笛卡尔积――是关系的乘法,它将分别来自两个数据集合中的行以所有可能的方式进行组合。
left join \ right join \ inner join 详解        并――关系的加法和减法,它可以在行的方向上合并两个表中的数据,就像把一个表垒在另一个表之上一样。
left join \ right join \ inner join 详解        交――返回两个数据集合所共有的行。
left join \ right join \ inner join 详解        差――返回只属于一个数据集合的行。
left join \ right join \ inner join 详解        连接――在水平方向上合并两个表,其方法是:将两个表中在共同数据项上相互匹配的那些行合并起来。
left join \ right join \ inner join 详解        除――返回两个数据集之间的精确匹配。
left join \ right join \ inner join 详解此外,作为一种实现现代关系代数运算的方法,SQL还提供了:
left join \ right join \ inner join 详解        子查询――类似于连接,但更灵活;在外部查询中,方式可以使用表达式、列表或者数据集合的地方都可以使用子查询的结果。
left join \ right join \ inner join 详解本章将主要讲述多种类型的连接、简单的和相关的子查询、几种类型的并、关系除以及其他的内容。
left join \ right join \ inner join 详解2 使用连接
left join \ right join \ inner join 详解2.1 连接类型
left join \ right join \ inner join 详解在关系代数中,连接运算是由一个笛卡尔积运算和一个选取运算构成的。首先用笛卡尔积完成对两个数据集合的乘运算,然后对生成的结果集合进行选取运算,确保只把分别来自两个数据集合并且具有重叠部分的行合并在一起。连接的全部意义在于在水平方向上合并两个数据集合(通常是表),并产生一个新的结果集合,其方法是将一个数据源中的行于另一个数据源中和它匹配的行组合成一个新元组。
left join \ right join \ inner join 详解SQL提供了多种类型的连接方式,它们之间的区别在于:从相互交叠的不同数据集合中选择用于连接的行时所采用的方法不同。
left join \ right join \ inner join 详解连接类型
        定义
left join \ right join \ inner join 详解内连接
        只连接匹配的行
left join \ right join \ inner join 详解左外连接
        包含左边表的全部行(不管右边的表中是否存在与它们匹配的行),以及右边表中全部匹配的行
left join \ right join \ inner join 详解右外连接
        包含右边表的全部行(不管左边的表中是否存在与它们匹配的行),以及左边表中全部匹配的行
left join \ right join \ inner join 详解全外连接
        包含左、右两个表的全部行,不管另外一边的表中是否存在与它们匹配的行。
left join \ right join \ inner join 详解(H)(theta)连接
        使用等值以外的条件来匹配左、右两个表中的行
left join \ right join \ inner join 详解交叉连接
        生成笛卡尔积-它不使用任何匹配或者选取条件,而是直接将一个数据源中的每个行与另一个数据源的每个行都一一匹配
left join \ right join \ inner join 详解在INFORMIX中连接表的查询 left join \ right join \ inner join 详解如果FROM子句指定了多于一个表引用,则查询会连接来自多个表的行。连接条件指定各列之间(每个表至少一列)进行连接的关系。因为正在比较连接条件中的列,所以它们必须具有一致的数据类型。
left join \ right join \ inner join 详解SELECT语句的FROM子句可以指定以下几种类型的连接
left join \ right join \ inner join 详解FROM子句关键字        相应的结果集
left join \ right join \ inner join 详解CROSS JOIN        笛卡尔乘积(所有可能的行对)
left join \ right join \ inner join 详解INNER JOIN        仅对满足连接条件的CROSS中的列
left join \ right join \ inner join 详解LEFT OUTER JOIN        一个表满足条件的行,和另一个表的所有行
left join \ right join \ inner join 详解RIGHT OUTER JOIN        与LEFT相同,但两个表的角色互换
left join \ right join \ inner join 详解FULL OUTER JOIN        LEFT OUTER 和 RIGHT OUTER中所有行的超集
left join \ right join \ inner join 详解left join \ right join \ inner join 详解2.2 内连接(Inner Join
left join \ right join \ inner join 详解内连接是最常见的一种连接,它页被称为普通连接,而E.FCodd最早称之为自然连接。
left join \ right join \ inner join 详解下面是ANSI SQL-92标准
left join \ right join \ inner join 详解select *
left join \ right join \ inner join 详解from  t_institution i
left join \ right join \ inner join 详解inner join t_teller t
left join \ right join \ inner join 详解on i.inst_no = t.inst_no
left join \ right join \ inner join 详解where i.inst_no = "5801"
left join \ right join \ inner join 详解其中inner可以省略。
left join \ right join \ inner join 详解等价于早期的连接语法
left join \ right join \ inner join 详解select *
left join \ right join \ inner join 详解from t_institution i, t_teller t
left join \ right join \ inner join 详解where i.inst_no = t.inst_no
left join \ right join \ inner join 详解and i.inst_no = "5801"
 
left join \ right join \ inner join 详解left join \ right join \ inner join 详解2.3 外连接
left join \ right join \ inner join 详解2.3.1
        左外连接(Left Outer Jion)
left join \ right join \ inner join 详解select *
left join \ right join \ inner join 详解from  t_institution i
left join \ right join \ inner join 详解left outer join t_teller t
left join \ right join \ inner join 详解on i.inst_no = t.inst_no
left join \ right join \ inner join 详解其中outer可以省略。
left join \ right join \ inner join 详解2.3.2        右外连接(Rigt Outer Jion)
left join \ right join \ inner join 详解select *
left join \ right join \ inner join 详解from  t_institution i
left join \ right join \ inner join 详解right outer join t_teller t
left join \ right join \ inner join 详解on i.inst_no = t.inst_no
left join \ right join \ inner join 详解2.3.3        全外连接(Full Outer)
left join \ right join \ inner join 详解全外连接返回参与连接的两个数据集合中的全部数据,无论它们是否具有与之相匹配的行。在功能上,它等价于对这两个数据集合分别进行左外连接和右外连接,然后再使用消去重复行的并操作将上述两个结果集合并为一个结果集。
left join \ right join \ inner join 详解在现实生活中,参照完整性约束可以减少对于全外连接的使用,一般情况下左外连接就足够了。在数据库中没有利用清晰、规范的约束来防范错误数据情况下,全外连接就变得非常有用了,你可以使用它来清理数据库中的数据。
left join \ right join \ inner join 详解select *
left join \ right join \ inner join 详解from  t_institution i
left join \ right join \ inner join 详解full outer join t_teller t
left join \ right join \ inner join 详解on i.inst_no = t.inst_no
left join \ right join \ inner join 详解2.3.4        外连接与条件配合使用
left join \ right join \ inner join 详解当在内连接查询中加入条件是,无论是将它加入到join子句,还是加入到where子句,其效果是完全一样的,但对于外连接情况就不同了。当把条件加入到 join子句时,SQL Server、Informix会返回外连接表的全部行,然后使用指定的条件返回第二个表的行。如果将条件放到where子句中,SQL Server将会首先进行连接操作,然后使用where子句对连接后的行进行筛选。下面的两个查询展示了条件放置位子对执行结果的影响:
left join \ right join \ inner join 详解条件在join子句
left join \ right join \ inner join 详解select *
left join \ right join \ inner join 详解from  t_institution i
left join \ right join \ inner join 详解left outer join t_teller t
left join \ right join \ inner join 详解on i.inst_no = t.inst_no
left join \ right join \ inner join 详解and i.inst_no = “5801
left join \ right join \ inner join 详解结果是:
left join \ right join \ inner join 详解inst_no    inst_name            inst_no    teller_no  teller_name
left join \ right join \ inner join 详解5801       天河区               5801       0001       tom
left join \ right join \ inner join 详解5801       天河区               5801       0002       david
left join \ right join \ inner join 详解5802       越秀区
left join \ right join \ inner join 详解5803       白云区
left join \ right join \ inner join 详解条件在where子句
left join \ right join \ inner join 详解select *
left join \ right join \ inner join 详解from  t_institution i
left join \ right join \ inner join 详解left outer join t_teller t
left join \ right join \ inner join 详解on i.inst_no = t.inst_no
left join \ right join \ inner join 详解where i.inst_no = “5801
left join \ right join \ inner join 详解结果是:
left join \ right join \ inner join 详解inst_no    inst_name            inst_no    teller_no  teller_name
left join \ right join \ inner join 详解5801       天河区               5801       0001       tom
left join \ right join \ inner join 详解5801       天河区               5801       0002       david
left join \ right join \ inner join 详解left join \ right join \ inner join 详解2.4 自身连接
left join \ right join \ inner join 详解自身连接是指同一个表自己与自己进行连接。这种一元连接通常用于从自反关系(也称作递归关系)中抽取数据。例如人力资源数据库中雇员与老板的关系。
left join \ right join \ inner join 详解下面例子是在机构表中查找本机构和上级机构的信息。
left join \ right join \ inner join 详解select s.inst_no superior_inst, s.inst_name sup_inst_name, i.inst_no, i.inst_name
left join \ right join \ inner join 详解from t_institution i
left join \ right join \ inner join 详解join t_institution s
left join \ right join \ inner join 详解on i.superior_inst = s.inst_no
left join \ right join \ inner join 详解left join \ right join \ inner join 详解结果是:
left join \ right join \ inner join 详解superior_inst sup_inst_name        inst_no    inst_name
left join \ right join \ inner join 详解800           广州市               5801       天河区
left join \ right join \ inner join 详解800           广州市               5802       越秀区
left join \ right join \ inner join 详解800           广州市               5803       白云区
left join \ right join \ inner join 详解left join \ right join \ inner join 详解2.5 交叉(无限制) 连接
left join \ right join \ inner join 详解交叉连接用于对两个源表进行纯关系代数的乘运算。它不使用连接条件来限制结果集合,而是将分别来自两个数据源中的行以所有可能的方式进行组合。数据集合中一的每个行都要与数据集合二中的每一个行分别组成一个新的行。例如,如果第一个数据源中有5个行,而第二个数据源中有4个行,那么在它们之间进行交叉连接就会产生20个行。人们将这种类型的结果集称为笛卡尔乘积。
left join \ right join \ inner join 详解大多数交叉连接都是由于错误操作而造成的;但是它们却非常适合向数据库中填充例子数据,或者预先创建一些空行以便为程序执行期间所要填充的数据保留空间。
left join \ right join \ inner join 详解select *
left join \ right join \ inner join 详解from  t_institution i
left join \ right join \ inner join 详解cross join t_teller t
left join \ right join \ inner join 详解在交叉连接中没有on条件子句

-- 

left join \ right join \ inner join 详解通俗的讲:

   left join \ right join \ inner join 详解  A   left   join   B   的连接的记录数与A表的记录数同

   left join \ right join \ inner join 详解  A   right   join   B   的连接的记录数与B表的记录数同

     left join \ right join \ inner join 详解  A   left   join   B   等价B   right   join   A

table   A: 

    Field_K,   Field_A

   left join \ right join \ inner join 详解  1                       a

   left join \ right join \ inner join 详解  3                       b

   left join \ right join \ inner join 详解  4                       c

 table   B: 

  left join \ right join \ inner join 详解  Field_K,   Field_B

   left join \ right join \ inner join 详解  1                  x 

  left join \ right join \ inner join 详解   2                  y

   left join \ right join \ inner join 详解  4                  z

select   a.Field_K,   a.Field_A,   b.Field_K,   b.Field_B   left join \ right join \ inner join 详解  

from   a   left   join   b   

on   a.Field_K=b.Field_K   left join \ right join \ inner join 详解    left join \ right join \ inner join 详解 

 Field_K         Field_A         Field_K         Field_B           left join \ right join \ inner join 详解 

 ----------   ----------   ----------   ----------     left join \ right join \ inner join 详解  

1                     a                     1                     x                     left join \ right join \ inner join 详解  

3                     b                     NULL               NULL   left join \ right join \ inner join 详解  

4                     c                     4                     z                     left join \ right join \ inner join 详解    left join \ right join \ inner join 详解  

select   a.Field_K,   a.Field_A,   b.Field_K,   b.Field_B   left join \ right join \ inner join 详解  

from   a   right   join   b   on   a.Field_K=b.Field_K   left join \ right join \ inner join 详解    left join \ right join \ inner join 详解  

Field_K         Field_A         Field_K         Field_B           left join \ right join \ inner join 详解 

 ----------   ----------   ----------   ----------     left join \ right join \ inner join 详解  

1                     a                     1                     x                     left join \ right join \ inner join 详解  

NULL               NULL               2                     y                     left join \ right join \ inner join 详解  

4                     c                     4                     z      

--

left join \ right join \ inner join 详解举个例子:   left join \ right join \ inner join 详解  
假设a表和b表的数据是这样的。
   left join \ right join \ inner join 详解  a                         b
       id     name  id     stock
      1  a             1         15
   left join \ right join \ inner join 详解  2      b             2         50
   left join \ right join \ inner join 详解  3      c                   left join \ right join \ inner join 详解    left join \ right join \ inner join 详解  
select   *   from   a   inner   join   b   on   a.id=b.id
   left join \ right join \ inner join 详解  这个语法是连接查询中的内连接,它产生的结果是
   left join \ right join \ inner join 详解  两个表相匹配的记录出现在结果列表中。
   left join \ right join \ inner join 详解  根据上面的表,出现的结果是这样的
   left join \ right join \ inner join 详解  a.id     name     b.id     stock
   left join \ right join \ inner join 详解  1       a             1         15
   left join \ right join \ inner join 详解  2             b             2         50
   left join \ right join \ inner join 详解  ----------------------------
   left join \ right join \ inner join 详解  select   *   from   a,b   where   a.id=b.id
   left join \ right join \ inner join 详解  这个语法是内连接的另外一种写法,其执行结果与inner   join   一样
   left join \ right join \ inner join 详解    left join \ right join \ inner join 详解  -------------------------------- 
    left join \ right join \ inner join 详解    left join \ right join \ inner join 详解  select   *   from   a   left/right   join   b   on   a.id=b.id
   left join \ right join \ inner join 详解  这个是外连接语法中的左外连接或右外连接
   left join \ right join \ inner join 详解  如果是左外连接的话,它将显示a表的所有记录,
   left join \ right join \ inner join 详解  select   a.*,b.*   from   a   left   join   b   on   a.id=b.id 
  left join \ right join \ inner join 详解  查询的结果是这样的:
   left join \ right join \ inner join 详解  a.id     name     b.id     stock
   left join \ right join \ inner join 详解  1         a         1             15
   left join \ right join \ inner join 详解  2               b         2             50
   left join \ right join \ inner join 详解  3               c       null         null
    left join \ right join \ inner join 详解  --------------------------------------------
   left join \ right join \ inner join 详解  如果是右外连接的话,它将显示b表的所有记录,
   left join \ right join \ inner join 详解  select   a.*,b.*   from   a   right   join   b   on   a.id=b.id
   left join \ right join \ inner join 详解  查询的结果是这样的:
   left join \ right join \ inner join 详解  a.id     name     b.id     stock
   left join \ right join \ inner join 详解  1         a         1             15
   left join \ right join \ inner join 详解  2               b         2             50   

--

left join \ right join \ inner join 详解select   a.*,b.*   from   a   left   join   b   on   a.k   =   b.k
  select   a.*,b.*   from   a   left   outer   join   b   on   a.k   =b.k   left join \ right join \ inner join 详解  
----------上面两种一样left   join是left   outer   join的简写   left join \ right join \ inner join 详解 
 select   a.*,b.*   from   a   left   inner   join   b   on   a.k   =   b.k     left join \ right join \ inner join 详解  
没有这种写法,错误的语句.

--

left join \ right join \ inner join 详解在你要使用多个left   join的时候   left join \ right join \ inner join 详解  
比如说10个   left join \ right join \ inner join 详解  
我们把10个全都写成left   join的形式   left join \ right join \ inner join 详解  
然后再SQL让他自动运行一下,它会把最后一次出现的left   join变成left   outer   join   left join \ right join \ inner join 详解  
所以依此推理,最后一个left   join会以left   outer   join的形式存在   left join \ right join \ inner join 详解  
当然,不管变不变对结果的显示没有任何影响   left join \ right join \ inner join 详解  
希望我的实验能对你有所帮助   

--

left join \ right join \ inner join 详解使用关系代数合并数据 left join \ right join \ inner join 详解
1 关系代数 left join \ right join \ inner join 详解
合并数据集合的理论基础是关系代数,它是由E.F.Codd于1970年提出的。
left join \ right join \ inner join 详解在关系代数的形式化语言中:
left join \ right join \ inner join 详解        用表、或者数据集合表示关系或者实体。
left join \ right join \ inner join 详解        用行表示元组。
left join \ right join \ inner join 详解        用列表示属性。
left join \ right join \ inner join 详解关系代数包含以下8个关系运算符
left join \ right join \ inner join 详解        选取――返回满足指定条件的行。
left join \ right join \ inner join 详解        投影――从数据集合中返回指定的列。
left join \ right join \ inner join 详解        笛卡尔积――是关系的乘法,它将分别来自两个数据集合中的行以所有可能的方式进行组合。
left join \ right join \ inner join 详解        并――关系的加法和减法,它可以在行的方向上合并两个表中的数据,就像把一个表垒在另一个表之上一样。
left join \ right join \ inner join 详解        交――返回两个数据集合所共有的行。
left join \ right join \ inner join 详解        差――返回只属于一个数据集合的行。
left join \ right join \ inner join 详解        连接――在水平方向上合并两个表,其方法是:将两个表中在共同数据项上相互匹配的那些行合并起来。
left join \ right join \ inner join 详解        除――返回两个数据集之间的精确匹配。
left join \ right join \ inner join 详解此外,作为一种实现现代关系代数运算的方法,SQL还提供了:
left join \ right join \ inner join 详解        子查询――类似于连接,但更灵活;在外部查询中,方式可以使用表达式、列表或者数据集合的地方都可以使用子查询的结果。
left join \ right join \ inner join 详解本章将主要讲述多种类型的连接、简单的和相关的子查询、几种类型的并、关系除以及其他的内容。
left join \ right join \ inner join 详解2 使用连接
left join \ right join \ inner join 详解2.1 连接类型
left join \ right join \ inner join 详解在关系代数中,连接运算是由一个笛卡尔积运算和一个选取运算构成的。首先用笛卡尔积完成对两个数据集合的乘运算,然后对生成的结果集合进行选取运算,确保只把分别来自两个数据集合并且具有重叠部分的行合并在一起。连接的全部意义在于在水平方向上合并两个数据集合(通常是表),并产生一个新的结果集合,其方法是将一个数据源中的行于另一个数据源中和它匹配的行组合成一个新元组。
left join \ right join \ inner join 详解SQL提供了多种类型的连接方式,它们之间的区别在于:从相互交叠的不同数据集合中选择用于连接的行时所采用的方法不同。
left join \ right join \ inner join 详解连接类型
        定义
left join \ right join \ inner join 详解内连接
        只连接匹配的行
left join \ right join \ inner join 详解左外连接
        包含左边表的全部行(不管右边的表中是否存在与它们匹配的行),以及右边表中全部匹配的行
left join \ right join \ inner join 详解右外连接
        包含右边表的全部行(不管左边的表中是否存在与它们匹配的行),以及左边表中全部匹配的行
left join \ right join \ inner join 详解全外连接
        包含左、右两个表的全部行,不管另外一边的表中是否存在与它们匹配的行。
left join \ right join \ inner join 详解(H)(theta)连接
        使用等值以外的条件来匹配左、右两个表中的行
left join \ right join \ inner join 详解交叉连接
        生成笛卡尔积-它不使用任何匹配或者选取条件,而是直接将一个数据源中的每个行与另一个数据源的每个行都一一匹配
left join \ right join \ inner join 详解在INFORMIX中连接表的查询 left join \ right join \ inner join 详解如果FROM子句指定了多于一个表引用,则查询会连接来自多个表的行。连接条件指定各列之间(每个表至少一列)进行连接的关系。因为正在比较连接条件中的列,所以它们必须具有一致的数据类型。
left join \ right join \ inner join 详解SELECT语句的FROM子句可以指定以下几种类型的连接
left join \ right join \ inner join 详解FROM子句关键字        相应的结果集
left join \ right join \ inner join 详解CROSS JOIN        笛卡尔乘积(所有可能的行对)
left join \ right join \ inner join 详解INNER JOIN        仅对满足连接条件的CROSS中的列
left join \ right join \ inner join 详解LEFT OUTER JOIN        一个表满足条件的行,和另一个表的所有行
left join \ right join \ inner join 详解RIGHT OUTER JOIN        与LEFT相同,但两个表的角色互换
left join \ right join \ inner join 详解FULL OUTER JOIN        LEFT OUTER 和 RIGHT OUTER中所有行的超集
left join \ right join \ inner join 详解left join \ right join \ inner join 详解2.2 内连接(Inner Join
left join \ right join \ inner join 详解内连接是最常见的一种连接,它页被称为普通连接,而E.FCodd最早称之为自然连接。
left join \ right join \ inner join 详解下面是ANSI SQL-92标准
left join \ right join \ inner join 详解select *
left join \ right join \ inner join 详解from  t_institution i
left join \ right join \ inner join 详解inner join t_teller t
left join \ right join \ inner join 详解on i.inst_no = t.inst_no
left join \ right join \ inner join 详解where i.inst_no = "5801"
left join \ right join \ inner join 详解其中inner可以省略。
left join \ right join \ inner join 详解等价于早期的连接语法
left join \ right join \ inner join 详解select *
left join \ right join \ inner join 详解from t_institution i, t_teller t
left join \ right join \ inner join 详解where i.inst_no = t.inst_no
left join \ right join \ inner join 详解and i.inst_no = "5801"
 
left join \ right join \ inner join 详解left join \ right join \ inner join 详解2.3 外连接
left join \ right join \ inner join 详解2.3.1
        左外连接(Left Outer Jion)
left join \ right join \ inner join 详解select *
left join \ right join \ inner join 详解from  t_institution i
left join \ right join \ inner join 详解left outer join t_teller t
left join \ right join \ inner join 详解on i.inst_no = t.inst_no
left join \ right join \ inner join 详解其中outer可以省略。
left join \ right join \ inner join 详解2.3.2        右外连接(Rigt Outer Jion)
left join \ right join \ inner join 详解select *
left join \ right join \ inner join 详解from  t_institution i
left join \ right join \ inner join 详解right outer join t_teller t
left join \ right join \ inner join 详解on i.inst_no = t.inst_no
left join \ right join \ inner join 详解2.3.3        全外连接(Full Outer)
left join \ right join \ inner join 详解全外连接返回参与连接的两个数据集合中的全部数据,无论它们是否具有与之相匹配的行。在功能上,它等价于对这两个数据集合分别进行左外连接和右外连接,然后再使用消去重复行的并操作将上述两个结果集合并为一个结果集。
left join \ right join \ inner join 详解在现实生活中,参照完整性约束可以减少对于全外连接的使用,一般情况下左外连接就足够了。在数据库中没有利用清晰、规范的约束来防范错误数据情况下,全外连接就变得非常有用了,你可以使用它来清理数据库中的数据。
left join \ right join \ inner join 详解select *
left join \ right join \ inner join 详解from  t_institution i
left join \ right join \ inner join 详解full outer join t_teller t
left join \ right join \ inner join 详解on i.inst_no = t.inst_no
left join \ right join \ inner join 详解2.3.4        外连接与条件配合使用
left join \ right join \ inner join 详解当在内连接查询中加入条件是,无论是将它加入到join子句,还是加入到where子句,其效果是完全一样的,但对于外连接情况就不同了。当把条件加入到 join子句时,SQL Server、Informix会返回外连接表的全部行,然后使用指定的条件返回第二个表的行。如果将条件放到where子句中,SQL Server将会首先进行连接操作,然后使用where子句对连接后的行进行筛选。下面的两个查询展示了条件放置位子对执行结果的影响:
left join \ right join \ inner join 详解条件在join子句
left join \ right join \ inner join 详解select *
left join \ right join \ inner join 详解from  t_institution i
left join \ right join \ inner join 详解left outer join t_teller t
left join \ right join \ inner join 详解on i.inst_no = t.inst_no
left join \ right join \ inner join 详解and i.inst_no = “5801
left join \ right join \ inner join 详解结果是:
left join \ right join \ inner join 详解inst_no    inst_name            inst_no    teller_no  teller_name
left join \ right join \ inner join 详解5801       天河区               5801       0001       tom
left join \ right join \ inner join 详解5801       天河区               5801       0002       david
left join \ right join \ inner join 详解5802       越秀区
left join \ right join \ inner join 详解5803       白云区
left join \ right join \ inner join 详解条件在where子句
left join \ right join \ inner join 详解select *
left join \ right join \ inner join 详解from  t_institution i
left join \ right join \ inner join 详解left outer join t_teller t
left join \ right join \ inner join 详解on i.inst_no = t.inst_no
left join \ right join \ inner join 详解where i.inst_no = “5801
left join \ right join \ inner join 详解结果是:
left join \ right join \ inner join 详解inst_no    inst_name            inst_no    teller_no  teller_name
left join \ right join \ inner join 详解5801       天河区               5801       0001       tom
left join \ right join \ inner join 详解5801       天河区               5801       0002       david
left join \ right join \ inner join 详解left join \ right join \ inner join 详解2.4 自身连接
left join \ right join \ inner join 详解自身连接是指同一个表自己与自己进行连接。这种一元连接通常用于从自反关系(也称作递归关系)中抽取数据。例如人力资源数据库中雇员与老板的关系。
left join \ right join \ inner join 详解下面例子是在机构表中查找本机构和上级机构的信息。
left join \ right join \ inner join 详解select s.inst_no superior_inst, s.inst_name sup_inst_name, i.inst_no, i.inst_name
left join \ right join \ inner join 详解from t_institution i
left join \ right join \ inner join 详解join t_institution s
left join \ right join \ inner join 详解on i.superior_inst = s.inst_no
left join \ right join \ inner join 详解left join \ right join \ inner join 详解结果是:
left join \ right join \ inner join 详解superior_inst sup_inst_name        inst_no    inst_name
left join \ right join \ inner join 详解800           广州市               5801       天河区
left join \ right join \ inner join 详解800           广州市               5802       越秀区
left join \ right join \ inner join 详解800           广州市               5803       白云区
left join \ right join \ inner join 详解left join \ right join \ inner join 详解2.5 交叉(无限制) 连接
left join \ right join \ inner join 详解交叉连接用于对两个源表进行纯关系代数的乘运算。它不使用连接条件来限制结果集合,而是将分别来自两个数据源中的行以所有可能的方式进行组合。数据集合中一的每个行都要与数据集合二中的每一个行分别组成一个新的行。例如,如果第一个数据源中有5个行,而第二个数据源中有4个行,那么在它们之间进行交叉连接就会产生20个行。人们将这种类型的结果集称为笛卡尔乘积。
left join \ right join \ inner join 详解大多数交叉连接都是由于错误操作而造成的;但是它们却非常适合向数据库中填充例子数据,或者预先创建一些空行以便为程序执行期间所要填充的数据保留空间。
left join \ right join \ inner join 详解select *
left join \ right join \ inner join 详解from  t_institution i
left join \ right join \ inner join 详解cross join t_teller t
left join \ right join \ inner join 详解在交叉连接中没有on条件子句

-- 

相关文章:

  • 2021-10-18
  • 2022-01-13
  • 2022-01-09
  • 2021-06-13
  • 2022-12-23
  • 2022-12-23
  • 2021-12-07
  • 2021-06-16
猜你喜欢
  • 2022-01-20
  • 2022-02-25
  • 2021-10-11
  • 2021-09-14
  • 2022-12-23
  • 2022-12-23
  • 2021-11-04
相关资源
相似解决方案