| 特性 | UNION | UNION ALL |
|---|---|---|
| 去重 | 是(排序+唯一) | 否 |
| 效能 | 慢(臨時表+排序+唯一檢查) | 快(直接追加) |
| 結果行數 | ≤ 所有分支行數之和 | = 所有分支行數之和 |
| 適用場景 | 分支間可能重複,需唯一結果 | 分支業務互斥、或允許重複 |
SELECT 欄位數、順序、型別相容ORDER BY / LIMIT 只能在最外層,子查詢需加括號SELECT E_Name FROM Employees_China UNION SELECT E_Name FROM Employees_USA;
結果(7 行,Carter, Thomas 僅保留 1 筆):
SELECT E_Name FROM Employees_China UNION ALL SELECT E_Name FROM Employees_USA;
結果(8 行,Carter, Thomas 出現 2 次):
-- 搜尋關鍵字「調整圖片」 (SELECT id, subject FROM article WHERE active=1 AND subject LIKE '%調整圖片%' ORDER BY add_time DESC) UNION ALL (SELECT id, class_name AS subject FROM web_class WHERE active=1 AND class_name LIKE '%調整圖片%' ORDER BY class_id DESC) UNION (SELECT id, subject FROM article WHERE active=1 AND (subject LIKE '%調整%' OR subject LIKE '%圖片%') ORDER BY add_time DESC);
UNION ALL)UNION 去重)UNION 會產生大臨時表並排序,極耗記憶體/磁碟EXPLAIN 觀察 select_type=UNION RESULT 的 type=ALL、rows 大小UNION 可下推條件到分支,減少臨時表寫入量UNION = 去重、UNION ALL = 直疊。全站搜尋案例展示:異表互斥用 ALL、同表兜底用 DISTINCT。養成「先寫 ALL,確認有重複再改 UNION」習慣,效能穩健。