SQL JOIN 與 UNION 教學

🧩 JOIN:資料表關聯

JOIN 用於將多個資料表中的資料以關聯鍵(key)結合起來。

🔹 INNER JOIN

回傳兩個資料表中符合條件的資料。

SELECT employees.name, departments.department_name
FROM employees
INNER JOIN departments
ON employees.department_id = departments.id;

➡️ 只顯示同時存在於 employeesdepartments 的匹配資料。


🔹 LEFT JOIN

回傳左表的所有資料,即使右表沒有匹配值。

SELECT employees.name, departments.department_name
FROM employees
LEFT JOIN departments
ON employees.department_id = departments.id;

➡️ 若右表無對應資料,該欄位以 NULL 顯示。


🔹 RIGHT JOIN

回傳右表的所有資料,即使左表沒有匹配值。


🔹 FULL JOIN

合併兩表所有資料,若一方無對應則以 NULL 補上。


🔹 CROSS JOIN

產生兩表的笛卡兒積(每筆左表資料對應右表所有資料)。

➡️ 若左表有 10 筆、右表有 5 筆,結果為 50 筆。


🔸 JOIN 類型比較

JOIN 類型
回傳內容
NULL 顯示

INNER JOIN

兩表都有的資料

LEFT JOIN

左表全部 + 右表匹配

右表缺值為 NULL

RIGHT JOIN

右表全部 + 左表匹配

左表缺值為 NULL

FULL JOIN

合併左右兩表全部

缺值以 NULL 顯示

CROSS JOIN

左表 × 右表組合

無條件匹配


🔗 UNION:合併查詢結果

🔹 UNION

將兩個查詢結果合併,並移除重複值

➡️ 結果中相同的名稱僅會出現一次。


🔹 UNION ALL

將結果合併但保留重複值


🔸 UNION 與 UNION ALL 比較

指令
是否去除重複
效能

UNION

✅ 是

較慢(需去重)

UNION ALL

❌ 否

較快


🧱 WITH(CTE,共用表表達式)

WITH 用於建立臨時查詢結果,可被後續 SQL 使用,使查詢更清晰。

🔹 基本語法

➡️ 此語法先建立名為 department_salary 的臨時結果,再於主查詢中重複使用。


🧠 小結

  • JOIN 用於橫向合併資料表(根據欄位關聯)。

  • UNION / UNION ALL 用於縱向合併查詢結果。

  • WITH (CTE) 可重用中間查詢,讓 SQL 更具可讀性。

👉 建議在實務應用中搭配使用 JOIN、UNION 與 CTE,以組合出結構化且高效的資料查詢流程。

Last updated