[SQL]常用語法彙整: 集合運算指令 (JOIN) [SQL-003]

ChunJen Wang
jimmy-wang
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、顧客姓名清單

Order Table
Customers Table
#作法一 透過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也有,但這邊就不附上了。

Source: Brightwhiz.com. Author: Editorial Staff

--

--

ChunJen Wang
jimmy-wang

嗨,歡迎你的到來,我目前在銀行擔任DS。過去曾做過銀行大型專案BA,也曾在轉職科技業DE中踢了鐵板,相信每一個人都有自己要走的路,而努力的過程,可以讓我們離心中理想更接近,如果我的文章能帶給你一些啟發與幫助,別忘了幫我在文章底下按下拍手~^^