一、对比理解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 |