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 2017-11-21 15:54 John_Baker 阅读(1170) 评论(0) 编辑 收藏 举报