JOIN 是關聯式資料庫核心操作。本文系統整理 SQL-92 標準語法下的各類聯接類型、行為差異與適用場景,並說明舊式 *=/=* 語法的棄用原因。
僅回傳兩張表皆符合聯接條件的資料列。不匹配的列被過濾。
SELECT * FROM Orders o
INNER JOIN Customers c ON o.CustomerID = c.CustomerID;
回傳左表所有列,右表無匹配則為 NULL。
SELECT c.CompanyName, o.OrderID
FROM Customers c
LEFT JOIN Orders o ON c.CustomerID = o.CustomerID;
-- 無訂單客戶的 OrderID 顯示 NULL
左向外聯接的鏡像,回傳右表所有列。
回傳兩表所有列,任一邊無匹配則補 NULL。
笛卡兒積,無 ON 子句。若左表 M 列、右表 N 列,結果 M×N 列。慎用於大表。
SELECT * FROM Colors CROSS JOIN Sizes; -- 顏色×尺寸組合
| 類型 | 舊式 (WHERE 子句) | SQL-92 (FROM 子句) |
|---|---|---|
| 左外聯接 | Table1.Col *= Table2.Col | LEFT JOIN ... ON ... |
| 右外聯接 | Table1.Col =* Table2.Col | RIGHT JOIN ... ON ... |
強烈建議使用 SQL-92 語法:語意明確、避免歧義(如複雜條件下舊式語法易產生錯誤結果)、符合標準、可移植性佳。