| JOIN 類型 | 關鍵字 | 保留方 | 結果列數 | 典型用途 |
|---|---|---|---|---|
| 內部聯結 | INNER JOIN | 雙方匹配列 | ≤ min(左,右) | 僅需雙方都有資料的情況 |
| 左外部聯結 | LEFT [OUTER] JOIN | 左表全部 | = 左表列數 | 主表帶明細,明細可能不存在 |
| 右外部聯結 | RIGHT [OUTER] JOIN | 右表全部 | = 右表列數 | 同上,方向相反 |
| 全外部聯結 | FULL [OUTER] JOIN | 雙方全部 | 左 + 右 - 交集 | 雙方都要保留,找出差異 |
| 交叉聯結 | CROSS JOIN | 笛卡兒積 | 左 × 右 | 生成所有組合 (如報表矩陣) |
| 自我聯結 | INNER/LEFT JOIN 同表 | 視 JOIN 類型 | 視條件 | 階層結構 (員工-主管)、遞迴查詢 |
原文包含一張示意圖 (2017011212025515.jpg) 展示兩張表 TableA、TableB 以 ID 聯結時,六種 JOIN 的結果集陰影區域。此處以文字描述:
A/B 自身聯結,如 ON A.MgrID = B.EmpID。-- 左外部聯結:所有客戶 + 其訂單 (無訂單顯示 NULL)
SELECT c.CustomerName, o.OrderID
FROM Customers c
LEFT JOIN Orders o ON c.CustomerID = o.CustomerID;
-- 自我聯結:員工與主管姓名
SELECT e.Name AS Employee, m.Name AS Manager
FROM Employees e
LEFT JOIN Employees m ON e.ManagerID = m.EmployeeID;
-- 交叉聯結:顏色 × 尺寸 產生所有 SKU
SELECT c.ColorName, s.SizeName
FROM Colors c
CROSS JOIN Sizes s;
ON (保留外部列) vs WHERE (轉為內部聯結) — 必須明確區分。CROSS JOIN 造成資料爆炸。ON 條件明確指定關聯欄位。HASH JOIN vs MERGE JOIN 提示。