內連接和外連接區別
表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
|
內連接和外連接區別