JOIN ... ON 是 ANSI SQL 92 標準連接語法,比舊式 WHERE a.id = b.id 更清晰、可維護。本文講解 **INNER JOIN、多表鏈式 JOIN、ON vs WHERE 語義差異、別名規範**,並給出兩個實戰案例。
SELECT a.col1, b.col2
FROM table_a a
INNER JOIN table_b b ON a.join_col = b.join_col;
SELECT p.lastname, p.firstname, o.orderno
FROM persons p
INNER JOIN orders o ON p.id_p = o.id_p;
SELECT a.title, t.artist
FROM album a
JOIN track t ON a.asin = t.album
WHERE t.song = 'alison';
| 寫法 | 示例 | 優點 | 缺點 |
|---|---|---|---|
| JOIN ON (推薦) | FROM a JOIN b ON a.id=b.id | 語義清晰、連接條件與篩選條件分離、優化器友好 | 初學者需適應 |
| WHERE 子查詢 | FROM a,b WHERE a.id=b.id | 舊碼兼容 | 連接與篩選混雜、易漏條件導致笛卡爾積、外連接難寫 |
users u, orders o, order_items oiu.id, o.user_id| 類型 | 關鍵字 | 結果 |
|---|---|---|
| 內連接 | INNER JOIN / JOIN | 僅匹配行 |
| 左連接 | LEFT JOIN / LEFT OUTER JOIN | 左表全保留,右表無匹配填 NULL |
| 右連接 | RIGHT JOIN | 右表全保留(可改 LEFT 交換順序) |
JOIN ... ON 是現代 SQL 連接標準。**強制別名、條件上移、小表驅動**三原則,能寫出清晰高效的多表查詢。