演示示例
说明:以下示例中,表a是员工表,有a,b,c,d四个员工,性别都是男性m。表b是工资表,有a,b,d四个员工,工资对应的是1000,2000,4000。然后分别演示带(+)符号的和不带(+)符号的,结果如下。
SQL> select * from a;
NAME SEX
-------------------- -----
a m
b m
c m
d m
SQL> select * from b;
NAME MONEY
-------------------- ----------
a 1000
b 2000
d 4000
SQL> select a.name,b.money from a,b where a.name=b.name(+);
NAME MONEY
-------------------- ----------
a 1000
b 2000
d 4000
c
SQL> select a.name,b.money from a,b where a.name=b.name;
NAME MONEY
-------------------- ----------
a 1000
b 2000
d 4000
可见,带(+)号时,a表中的所有人都在,即使工资为空。不带(+)时,a表中的没有出现工资为空的员工c。
对(+)号的解释
**(+) 表示外连接。**条件关联时,一般只列出表中满足连接条件的数据。如果条件的一边出现(+),则另一边的表就是主表,主表中的所有记录都会出现,即使附表中有的记录为空
(+)的扩展:SQL表连接
SQL表连接分类
内连接,外连接,交叉连接,其中外连接包括左连接和右连接。
SQL表连接示例
内连接
SQL> select a.name,b.money from a,b where a.name=b.name;
SQL> select a.name,b.money from a inner join b on a.name=b.name;
左连接
SQL> select a.name,b.money from a,b where a.name=b.name(+);
SQL> select a.name,b.money from a left join b on a.name=b.name;
右连接
SQL> select a.name,b.money from a right join b on a.name=b.name;
SQL> select a.name,b.money from a,b where a.name(+)=b.name;
交叉连接
SQL> select a.name,b.money from a full join b on a.name=b.name;
NAME MONEY
-------------------- ----------
a 1000
b 2000
c
d 4000
SQL> select a.name,b.money from a,b where a.name(+)=b.name(+);
select a.name,b.money from a,b where a.name(+)=b.name(+)
*
第 1 行出现错误:
ORA-01468: 一个谓词只能引用一个外部联接的表
所以(+)只是表示外连接,并不表示交叉连接。
记得帮我点赞哦!
念念不忘,必有回响,小伙伴们帮我点个赞吧,非常感谢。
我是职场亮哥,YY高级软件工程师、四年工作经验,拒绝咸鱼争当龙头的斜杠程序员。
听我说,进步多,程序人生一把梭
如果有幸能帮到你,请帮我点个【赞】,给个关注,如果能顺带评论给个鼓励,将不胜感激。
本人所有文章、回答都与版权保护平台有合作,著作权归职场亮哥所有,未经授权,转载必究!