MySQL 聯結查詢分為內聯結、外聯結(左/右)、全聯結四類。本文以圖解邏輯與記憶口訣,幫助快速掌握各類型差異與適用場景。
| 類型 | 關鍵字 | 結果集包含 | Venn 圖邏輯 |
|---|---|---|---|
| 內聯結 | INNER JOIN | 兩表都符合條件的列 | 交集 |
| 左外聯結 | LEFT JOIN | 左表所有列 + 右表符合條件列(無則 NULL) | 左集合完整 |
| 右外聯結 | RIGHT JOIN | 右表所有列 + 左表符合條件列(無則 NULL) | 右集合完整 |
| 全外聯結 | FULL JOIN | 兩表所有列(MySQL 不直接支援,需 UNION 模擬) | 並集 |
SELECT A.name, B.name
FROM A
INNER JOIN B ON A.id = B.id;
SELECT A.name, B.name
FROM A
LEFT JOIN B ON A.id = B.id;
結果必含 A 所有列,B 無對應處為 NULL。
SELECT A.name, B.name
FROM B
RIGHT JOIN A ON B.id = A.id;
等價於 A LEFT JOIN B,僅表順序互換。
SELECT * FROM A LEFT JOIN B ON A.id = B.id
UNION
SELECT * FROM A RIGHT JOIN B ON A.id = B.id;
「內去外留,左記右忘」
- 內聯結:去除所有不符合條件的列(只保留交集)。
- 外聯結:留保其中一邊所有列。
- 左聯結:記住左表(左表全保留)。
- 右聯結:忘記左表(右表全保留,左表只留符合條件)。
同一張表自我 JOIN,需使用別名:
SELECT e1.name AS employee, e2.name AS manager
FROM employee e1
LEFT JOIN employee e2 ON e1.manager_id = e2.id;