oracle 表连接问题

用法:select a.* from sys_user a left join sys_org b on a.org_id=b.org_id

  left join 左连接,左边所有记录,右边可为空(个人比较常用这个)

  inner join 内连接,两边不为空,join的默认值是inner join

  right join 右连接,右边所有记录,左边可为空

         个人比较少用,相当于两个表位置相反然后用left join

  full join 全连接,两边都可为空

  cross join 交叉连接,又称笛卡儿积连接,结果集为M*N

    不可以加on,其它join连接都必须加上on

    加上where条件之后可以相当于inner join

    备注:所有的join连接,都可以加上类似where a.org_id=b.org_id的条件,达到同样的效果

  【具体说明参考地址:https://www.cnblogs.com/lovemoon714/archive/2012/03/02/2376782.htm】

  left outer join 左外连接

    其实就是left join(左连接)

    没有outer join这种写法,应该是full join

  full outer join 全外连接,相当于full join

  + 在左边相当于右连接;+ 在右边相当于左连接

  可以这么理解:+ 表示补充,即哪个表有加号,这个表就是匹配表

  个人比较少用这种写法。注意事项:

  1.(+)操作符只能出现在WHERE子句中,不能与OUTER JOIN语法同时使用,不能与OR和IN操作符一起使用

  2.(+)操作符只能用于实现左外连接和右外连接,而不能用于实现完全外连接。

  3. 当使用(+)操作符执行外连接时,如果在WHERE子句中包含有多个条件,则必须在所有条件中都包含(+)操作符。

  4.(+)操作符只适用于列,而不能用在表达式上。

举例:

  select * from sys_user --用户列表

  select * from sys_org 机构列表

  select * from sys_user a left join sys_org b on a.org_id = b.org_id --连接

  select * from sys_user a right join sys_org b on a.org_id = b.org_id --右连接

  select * from sys_user a inner join sys_org b on a.org_id = b.org_id --连接

  select * from sys_user a full join sys_org b on a.org_id = b.org_id --全连接

  select * from sys_user a cross join sys_org b --交叉连接,又称笛卡尔积连接,相当于:select * from sys_user a, sys_org b

  select * from sys_user a cross join sys_org b where a.org_id = b.org_id --相当于内连接

  select * from sys_user a,sys_org b where a.org_id(+)=b.org_id --右连接

  select * from sys_user a,sys_org b where a.org_id=b.org_id(+) --左连接

猜你喜欢

转载自www.cnblogs.com/GodSince/p/11003684.html