innerouter 連線之間的差異

SQL 有各種連線型別來指定結果中是否包含(非)匹配行:INNER JOINLEFT OUTER JOINRIGHT OUTER JOINFULL OUTER JOININNEROUTER 關鍵字是可選的)。下圖強調了這些連線型別之間的差異:藍色區域表示連線返回的結果,白色區域表示連線不返回的結果。

StackOverflow 文件

交叉加入 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