一、sql的left join 、right join 、inner join之间的区别 left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录 inner join(等值连接) 只返回两个表中联结字段相等的行 outer join(外连接) 可分为左外连接left outer join和右外连接right outer join
举例如下: -------------------------------------------- 表A记录如下: aID aNum 1 a 2 a 3 a 4 a 5 a
表B记录如下: bID bName 1 2 3 4 8
-------------------------------------------- 1.left join sql语句如下: select * from A left join B on A.aID = B.bID
结果如下: aID aNum bID bName 1 a 1 2 a 2 3 a 3 4 a 4 5 a NULL NULL
(所影响的行数为 5 行) 结果说明: left join是以A表的记录为基础的,A可以看成左表,B可以看成右表,left join是以左表为准的. 换句话说,左表(A)的记录将会全部表示出来,而右表(B)只会显示符合搜索条件的记录(例子中为: A.aID = B.bID). B表记录不足的地方均为NULL. -------------------------------------------- 2.right join sql语句如下: select * from A right join B on A.aID = B.bID
结果如下: aID aNum bID bName 1 a 1 2 a 2 3 a 3 4 a 4 NULL NULL 8
(所影响的行数为 5 行) 结果说明: 仔细观察一下,就会发现,和left join的结果刚好相反,这次是以右表(B)为基础的,A表不足的地方用NULL填充. -------------------------------------------- 3.inner join sql语句如下: select * from A innerjoin B on A.aID = B.bID
结果如下: aID aNum bID bName 1 a 1 2 a 2 3 a 3 4 a 4
结果说明: 很明显,这里只显示出了 A.aID = B.bID的记录.这说明inner join并不以谁为基础,它只显示符合条件的记录. -------------------------------------------- 4.outer join
left join 是 left outer join 的简写,两者含义一样的。 right join 是 right outer join 的简写,两者含义一样的。
举例如下: -------------------------------------------- 有2个表,部门表和职工表,一个部门下可以有多个职工,一个职工只能对应一个部门,所以部门和职工时1对多的关系。
1.要进行部门表和职工表的关联查询,并要查询出所有的部门信息,这时候,下面的左连接查询就能够查询出想要的结果,左连接就是以left join前面的表为主表,即使有些记录关联不上,主表的信息能够查询出来的。
select * from dept left outer join employee on dept.deptid=employee.deptid 或者:select * from dept ,employee where dept.deptid=employee.deptid(+) 在(+)计算时,哪个带(+)哪个需要条件符合的,另一个全部的。即放左即右连接,放右即左连接。
2.要进行部门表和职工表的关联查询,并要查询出所有的职工信息,这时候,下面的右连接查询就能够查询出想要的结果,右连接就是以right join后面的表为主表,即使有些记录关联不上,主表的信息能够查询出来 select * from dept right outer join employee on dept.deptid=employee.deptid 或者:select * from dept ,employee where dept.deptid(+)=employee.deptid
外连接就是在关联不上的时候,把其中的部分信息查询出来。如果都存在关联关系,查询出来的结果是一样的。
5.full join 全连接full join,语法为full join ... on ...,全连接的查询结果是左外连接和右外连接查询结果的并集,即使一些记录关联不上,也能够把部分信息查询出来
select * from dept full join employee on dept.deptid=employee.deptid select * from dept full join employee on 1=1 --------------------- 作者:powerfuler 来源:CSDN 原文:https://blog.csdn.net/dingjianmin/article/details/ 版权声明:本文为博主原创文章,转载请附上博文链接!
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.mushiming.com/mjsbk/8702.html