Oracle左连接,右连接,全外连接和+号的用法

左外连接  left outer join/left join

LEFT JOIN是以左表的记录为基础的,示例中t_A可以看成左表,t_B可以看成右表,它的结果集是t_A表中的全部数据,再加上t_A表和t_B表匹配后的数据。换句话说,左表(t_A)的记录将会全部表示出来,而右表(t_B)只会显示符合搜索条件的记录。t_B表记录不足的地方均为NULL。

示例:select * from t_A a left join t_B b on a.id = b.id; 或 select * from t_A a left outer join t_B b on a.id = b.id;

test:

SELECT S.S#,SN,C#,G
from S left join SC
on S.S#=SC.S#;

       S#    SN    C#    G
1    S1     A                  C2                 A    
2    S1     A                  C1                 A    
3    S2     B                  C2                 C    
4    S2     B                  C4                 C    
5    S2     B                  C1                 B    
6    S3     C                      
7    S4     D                     

 

用(+)来实现, 这个+号可以这样来理解: + 表示补充,即哪个表有加号,这个表就是匹配表。如果加号写在右表,左表就是全部显示,所以是左连接。

select S.S#,SN,C#,G

from S,SC

where S.S#=SC.S#(+);

       S#    SN    C#    G
1    S1     A                  C2                 A    
2    S1     A                  C1                 A    
3    S2     B                  C2                 C    
4    S2     B                  C4                 C    
5    S2     B                  C1                 B    
6    S3     C                      
7    S4     D                     

 

右外连接  right outer join/right join

和LEFT JOIN的结果刚好相反,是以右表(t_B)为基础的。它的结果集是t_B表所有记录,再加上t_A和t_B匹配后的数据。 t_A表记录不足的地方均为NULL。

示例:select * from t_A a right join t_B b on a.id = b.id;
或
select * from t_A a right outer join t_B b on a.id = b.id;

test:

select S.S#,SN,C#,G
from S right join SC
on S.S#=SC.S#;

       S#    SN    C#    G
1    S1     A                  C2                 A    
2    S1     A                  C1                 A    
3    S2     B                  C4                 C    
4    S2     B                  C2                 C    
5    S2     B                  C1                 B   

用(+)来实现, 这个+号可以这样来理解: + 表示补充,即哪个表有加号,这个表就是匹配表。如果加号写在左表,右表就是全部显示,所以是右连接

test:

select S.S#,SN,C#,G
from S,SC
where S.S#(+)=SC.S#;

       S#    SN    C#    G
1    S1     A                  C2                 A    
2    S1     A                  C1                 A    
3    S2     B                  C4                 C    
4    S2     B                  C2                 C    
5    S2     B                  C1                 B   

全外连接  full outer join/full join

左表和右表都不做限制,所有的记录都显示,两表不足的地方均为NULL。 全外连接不支持(+)写法。

示例: select * from t_A a full join t_B b on a.id = b.id; 或 select * from t_A a full outer join t_B b on a.id = b.id;

posted on   John_Baker  阅读(1185)  评论(0编辑  收藏  举报

编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示