id name id name
-- ---- -- ----
1 Pirate 1 Rutabaga
2 Monkey 2 Pirate
3 Ninja 3 Darth Vader
4 Spaghetti 4 Ninja
假設左邊爲表A的內容,右邊爲表B的內容。
1.普通的join (inner join)
取表A和表B的交集。
SELECT * FROM TableA
INNER JOIN TableB
ON TableA.name = TableB.name
id name id name
-- ---- -- ----
1 Pirate 2 Pirate
3 Ninja 4 Ninja
2.左外連接(left_outer_join)
除了選擇表A和表B的交集以外,表A中的其他元素也要選擇——這時對應的表B中的元素爲null
SELECT * FROM TableA
LEFT OUTER JOIN TableB
ON TableA.name = TableB.name
id name id name
-- ---- -- ----
1 Pirate 2 Pirate
2 Monkey null null
3 Ninja 4 Ninja
4 Spaghetti null null
進而對於以上結果我們可以得到(A-B)即A與B的差集
SELECT * FROM TableA
LEFT OUTER JOIN TableB
ON TableA.name = TableB.name
WHERE TableB.id IS null
id name id name
-- ---- -- ----
2 Monkey null null
4 Spaghetti null null
3.全外連接(full_outer_join)
相當於表A和表B的並集,除了表A與表B的交集以外,其餘部分不相交的部分結果中一定有一半爲NULL
id name id name
-- ---- -- ----
1 Pirate 2 Pirate
2 Monkey null null
3 Ninja 4 Ninja
4 Spaghetti null null
null null 1 Rutabaga
null null 3 Darth Vader