当前位置:网站首页 > 技术博客 > 正文

left join和right join和inner join的区别



一、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/  版权声明:本文为博主原创文章,转载请附上博文链接!

版权声明


相关文章:

  • psr代码规范2024-11-13 15:30:01
  • 一个usb接口最多能连接的设备数2024-11-13 15:30:01
  • 图像处理中的数学方法2024-11-13 15:30:01
  • 树状数组lowbit2024-11-13 15:30:01
  • vm虚拟机怎么安装linux2024-11-13 15:30:01
  • 左连接查询sql语句 实例2024-11-13 15:30:01
  • 指针 c2024-11-13 15:30:01
  • laya教程2024-11-13 15:30:01
  • 虚拟机系统都有哪些2024-11-13 15:30:01
  • 微信小程序源码平台2024-11-13 15:30:01