多表查询之内连接VS外连接

时间:2024-04-12 09:55:53
在实际项目中对数据库进行查询是再常见不过的东西了,但是根据不同的条件查询所用的语句也是 千差万别的,最常见的便是数据库中多表之间的联合查询。说到联合查询就不得不提一下查询语句中的表连接关系。我们所用的多表查询语句中表间关系无非有两 种,一种为内连接(inner join),另一种为外连接(outer join)。具体细分一下外连接又可分为:左外连接(left join)、右外连接(right join)、全连接(full join),另外还常见的形式有left outer join,right outer join,full outer join。他们之间的具体关系可以下图简单表示:

多表查询之内连接VS外连接

 

一、对比理解inner join和 full join

 

对这两个连接关系的理解我们可以借助于数学上的交并集。Inner join也就是内连接,要求的是多表之间必须同时都满足两表之间的对接条件才能查出结果,也就是说按照对接关系(即on条件)查出的结果必须是多表之间的 交集,不满足on条件将会被过滤掉,可以理解为数学上的add条件。Out join与inner join却恰恰相反,它所查出来的结果是两表各自按条件查询结果的并集,outer join的存在,相当于数学上的or条件。

 

二、对比理解left join和right join

 

Left join和right join最大的区别在于它确定了以哪个表为查询结果基准。Left join确定以左边表为基准,也就是join字符前的那张表,而right join确定以右边表为基准,即join字符后的那张表。进行查询时首先按照基准表的查询结果确定记录条数然后再根据条件查询非基准表。具体用法以下例说 明:

 

表一:TableOne(别名为TO)

 

ID

A

B

C

1

A1

B1

C1

2

A2

B2

C2

3

A3

B3

C3 

 

表二:TableTwo(别名为TT)

 

ID

D

E

1

D1

E1

2

D2

E2

4

D4

E4

 

请注意两表中的ID号的区别。

 

 

 

Inner join:

 

Select TO.A , TO.B , TT.D , TT.E fromTableOne TO inner join TableTwo TT on TO.ID=TT.ID

 

其查询结果为:

 

A

B

D

E

A1

B1

D1

E1

A2

B2

D2

E2

 

 

 

Left  join:

 

Select TO.A , TO.B , TT.D ,TT.E fromTableOne TO left join TableTwo TT on TO.ID=TT.ID

 

其查询结果为:

 

A

B

D

E

A1

B1

D1

E1

A2

B2

D2

E2

A3

B3

NULL

NULL

 

 

 

Right join:

 

Select TO.A , TO.B , TT.D ,TT.E fromTableOne TO right join TableTwo TT on TO.ID=TT.ID

 

其查询结果为:

 

A

B

D

E

A1

B1

D1

E1

A2

B2

D2

E2

NULL

NULL

D4

E4

 


 

Full join:

 

Select TO.A , TO.B , TT.D ,TT.E fromTableOne TO full join TableTwo TT on TO.ID=TT.ID

 

其查询结果为:

 

A

B

D

E

A1

B1

D1

E1

A2

B2

D2

E2

A3

B3

NULL

NULL

NULL

NULL

D4

E4




本文转自TBHacker博客园博客,原文链接:http://www.cnblogs.com/jiqing9006/archive/2012/08/08/2628359.html,如需转载请自行联系原作者