
| 類型 | 關鍵字 | 結果集 | 文氏圖區域 |
|---|---|---|---|
| 內連接 | INNER JOIN / JOIN | A∩B(雙方都有匹配) | 交集 |
| 左連接 | LEFT JOIN | A 全部 + B 匹配(無則 NULL) | A 圓完整 |
| 右連接 | RIGHT JOIN | B 全部 + A 匹配 | B 圓完整 |
| 全連接 | FULL JOIN (MySQL 不支援,用 UNION 模擬) | A∪B | 兩圓並集 |
| 左獨有 | LEFT JOIN ... WHERE B.id IS NULL | A - B | A 月牙 |
| 右獨有 | RIGHT JOIN ... WHERE A.id IS NULL | B - A | B 月牙 |
| 交叉連接 | CROSS JOIN | A×B(笛卡爾積) | 矩形全域 |
規則 UNION UNION ALL 去重 是(排序+唯一) 否 效能 慢(臨時表+排序) 快(直接疊加) 欄數 必須相同 必須相同 欄型別 建議一致,隱式轉換 建議一致 欄名稱 以第一個 SELECT 為準 以第一個 SELECT 為準 ORDER BY / LIMIT 需用括號包裹子查詢,或放在最後 同左 UNION 實戰範例
-- 錯誤:各分支單獨 ORDER BY(會被優化器忽略) SELECT * FROM a ORDER BY id UNION SELECT * FROM b ORDER BY id; -- 正確:整體排序 (SELECT * FROM a) UNION (SELECT * FROM b) ORDER BY id; -- 分頁:整體 LIMIT (SELECT * FROM a) UNION (SELECT * FROM b) ORDER BY id LIMIT 20 OFFSET 40;進階:UNION 內部執行機制
UNION:寫入前檢查重複(哈希/排序),UNION ALL:直接追加JOIN 橫向拼欄、UNION 縱向疊列。JOIN 看文氏圖選類型;UNION 業務無重疊用 ALL,有重疊用 DISTINCT(預設)。記住:ORDER BY/LIMIT 只寫在最外層,子查詢加括號。