innerouter 連線之間的差異
SQL 有各種連線型別來指定結果中是否包含(非)匹配行:INNER JOIN
,LEFT OUTER JOIN
,RIGHT OUTER JOIN
和 FULL OUTER JOIN
(INNER
和 OUTER
關鍵字是可選的)。下圖強調了這些連線型別之間的差異:藍色區域表示連線返回的結果,白色區域表示連線不返回的結果。
交叉加入 SQL 圖形演示( 參考 ):
以下是這個答案的例子。
例如,有兩個表格如下:
A B
- -
1 3
2 4
3 5
4 6
注意,(1,2)對於 A 是唯一的,(3,4)是常見的,並且(5,6)對於 B 是唯一的。
內部聯接
使用任一等效查詢的內部聯接給出了兩個表的交集,即它們共有的兩行:
select * from a INNER JOIN b on a.a = b.b;
select a.*,b.* from a,b where a.a = b.b;
a | b
--+--
3 | 3
4 | 4
左外連線
左外連線將給出 A 中的所有行,以及 B 中的任何公共行:
select * from a LEFT OUTER JOIN b on a.a = b.b;
a | b
--+-----
1 | null
2 | null
3 | 3
4 | 4
右外連線
類似地,右外連線將給出 B 中的所有行,以及 A 中的任何公共行:
select * from a RIGHT OUTER JOIN b on a.a = b.b;
a | b
-----+----
3 | 3
4 | 4
null | 5
null | 6
全外連線
完全外連線將為你提供 A 和 B 的並集,即 A 中的所有行和 B 中的所有行。如果 A 中的某些內容在 B 中沒有相應的資料,則 B 部分為空,並且反之亦然。
select * from a FULL OUTER JOIN b on a.a = b.b;
a | b
-----+-----
1 | null
2 | null
3 | 3
4 | 4
null | 6
null | 5