[SQL]常用語法彙整: 集合運算指令 (JOIN) [SQL-003]
Published in
4 min readMay 5, 2021
本篇整理SQL 集合運算指令 (JOIN)。
第一篇有入門指令,包含如何選取欄位、表格、排序、更新。
以及第二篇運算指令,包含最大最小/計算個數、平均等等。
其他則有我玩HackerRank的紀錄分享。
SQL JOIN相關指令
- INNER/LEFT/RIGHT/FULL Join
- Self Join
- Union Join
INNER Join
搜尋交集(intersection)的資料。
SELECT column_name(s)
FROM table1
INNER JOIN table2
ON table1.column_name = table2.column_name;
範例: 撈出訂單ID、顧客姓名清單
#作法一 透過CUSTOMER ID來JOIN ORDER紀錄
SELECT Customers.CustomerName, Orders.OrderID
FROM Customers
INNER JOIN Orders
ON Customers.CustomerID = Orders.CustomerID;#作法二 透過CUSTOMER ID來JOIN CUSTOMER紀錄
SELECT Orders.OrderID, Customers.CustomerName
FROM Orders
INNER JOIN Customers
ON Orders.CustomerID = Customers.CustomerID;
LEFT/RIGHT Join
根據ON的條件找只符合指定集合的key。
若增加Where key is NULL條件就可以找出差集。
SELECT column_name(s)
FROM table1
LEFT JOIN table2
ON table1.column_name = table2.column_name;SELECT column_name(s)
FROM table1
RIGHT JOIN table2
ON table1.column_name = table2.column_name;#差集做法,以LEFT JOIN為例
SELECT column_name(s)
FROM table1
LEFT JOIN table2
ON table1.column_name = table2.column_name
WHERE table2.column_name is NULL;
FULL Join
搜尋聯集(Union)的資料。
SELECT column_name(s)
FROM table1
FULL OUTER JOIN table2
ON table1.column_name = table2.column_name
WHERE condition;
若聯集有一方沒有資料可以JOIN,則會以NULL顯示。
Self Join
如同inner join,只是兩個表的欄位名稱皆相同。
SELECT column_name(s)
FROM table1 T1, table1 T2
WHERE condition;
Union Join
用來整併多個 SELECT
statements 的搜尋結果。
- 需要注意跨
SELECT
設定的欄位數量必須一致 - 欄位內容資料格式(data type)必須一致
SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;
UNION
只顯示 distinct後資料;UNION ALL
則顯示重複的資料(duplicate values)。
感謝收看,最後也附上視覺化文氏圖彙整,是網路上普遍能找到的資源,如有需要參考3個資料集的JOIN也有,但這邊就不附上了。