先说背景:曾经一直认为左连接和左外连接是不一样的,在学校学习的时候这概念都很模糊,毕业的时候又基本都交给老师了,现在才知道原来左连接是左外连接的简写。。。。。下面详细的介绍一下自己的理解吧。如果有错,请大家指正。
首先sql的多表连接分为两大部分:外连接和内连接,外连接又分为左连接,右连接,全外连接 。
左右连接的区别:
A left join B 的结果集与A表的记录数同
A right join B 的结果集与B表的记录数同
A left join B 等价 B right join A
内连接:
A inner join B on a.id = b.id 结果集是AB两表的交集
select * from a inner join b on a.id = b.id 等价于
select * from a,b where a.id = b.id
注意:(以下摘自 http://www.cnblogs.com/cy163/archive/2008/10/16/1312920.html)
在你要使用多个left join的时候 比如说10个
我们把10个全都写成left join的形式
然后再SQL让他自动运行一下,它会把最后一次出现的left join变成left outer join
所以依此推理,最后一个left join会以left outer join的形式存在
当然,不管变不变对结果的显示没有任何影响
CROSS JOIN 笛卡尔乘积(所有可能的行对)注意不能使用on, 在交叉连接中没有on条件子句
INNER JOIN 仅对满足连接条件的CROSS中的列
LEFT OUTER JOIN 一个表满足条件的行,和另一个表的所有行
RIGHT OUTER JOIN 与LEFT相同,但两个表的角色互换
FULL OUTER JOIN LEFT OUTER 和 RIGHT OUTER中所有行的超集