表t_user1,t_user2,t_user3,各有id,name两列
id |
name |
1 |
10A |
2 |
20A |
id |
name |
1 |
10B |
3 |
30B |
id |
name |
1 |
10C |
4 |
40C |
连接分为两种:内连接与外连接。
A.内连接
内连接,即最常见的等值连接,例:
SELECT *
FROM t_user1,t_user2
WHERE t_user1.id = t_user2.id
结果
id |
name |
id |
name |
1 |
10A |
1 |
10B |
B.外连接
外连接分为左外连接,右外连接和全外连接。
1. 左外连接 left outer join 或者 left join(左表的外连接)
左外连接就是在等值连接的基础上加上主表中的未匹配数据,例:
SELECT *
FROM t_user1
LEFT OUTER JOIN t_user2
ON t_user1.id = t_user2.id
Oracle 支持另一种写法
SELECT *
FROM t_user1 ,t_user2
WHERE t_user1.id=t_user2.id(+)
结果:
id |
name |
id |
name |
1 |
10A |
1 |
10B |
2 |
20A |
三个表做左外连接
SELECT *
FROM t_user1
LEFT OUTER JOIN t_user2
ON t_user1.id=t_user2.id
LEFT OUTER JOIN t_user3
ON t_user1.id=t_user3.id
Oracle 支持的另外一种写法
SELECT *
FROM t_user1,t_user2,t_user3
WHERE t_user1.id=t_user2.id(+)
AND t_user1.id=t_user3.id(+)
结果:
id |
name |
id |
name |
id |
name |
1 |
10A |
1 |
10B |
1 |
10C |
2 |
20A |
2. 右外连接 right outer join 或者 right join
右外连接是在等值连接的基础上加上被连接表的不匹配数据
SELECT *
FROM t_user1
RIGHT OUTER JOIN t_user2
ON t_user1.id=t_user2.id
Oracle支持的另一种写法
SELECT *
FROM t_user1,t_user2
WHERE t_user1.id(+)=t_user2.id
结果:
id |
name |
id |
name |
1 |
10A |
1 |
10B |
3 |
30B |
3.全外连接 full outer join 或者 full join
全外连接是在等值连接的基础上将左表和右表的未匹配数据都加上
SELECT *
FROM t_user1
FULL OUTER JOIN t_user2
ON t_user1.id=t_user2.id
全外连接的等价写法,对同一表先做左连接,然后右连接
SELECT t_user1.*,t_user2.*
FROM t_user1
LEFT OUTER JOIN t_user2
ON t_user1.id = t_user2.id
UNION
SELECT t_user1.*,t_user2.*
FROM t_user2
LEFT OUTER JOIN t_user1
ON t_user1.id = t_user2.id
结果:
id |
name |
id |
name |
1 |
10A |
1 |
10B |
2 |
20A |
||
3 |
30B |
原文地址:https://www.cnblogs.com/Archer-Fang/p/9200755.html