| 特性 | UNION | UNION ALL |
|---|---|---|
| 重複行 | 自動去重(DISTINCT) | 保留所有行 |
| 效能 | 需排序/哈希去重,較慢 | 直接拼接,極快 |
| 適用場景 | 業務要求唯一結果集 | 明知無重複/允許重複/追求速度 |
SELECT 列數相同。CAST)。-- Employees_China
E_ID | E_Name
01 | Zhang, Hua
02 | Wang, Wei
03 | Carter, Thomas
04 | Yang, Ming
-- Employees_USA
E_ID | E_Name
01 | Adams, John
02 | Bush, George
03 | Carter, Thomas -- 重複
04 | Gates, Bill
SELECT E_Name FROM Employees_China
UNION
SELECT E_Name FROM Employees_USA;
/* 結果(7 行,Carter, Thomas 僅出現一次)
E_Name
Adams, John
Bush, George
Carter, Thomas
Gates, Bill
Wang, Wei
Yang, Ming
Zhang, Hua
*/
SELECT E_Name FROM Employees_China
UNION ALL
SELECT E_Name FROM Employees_USA;
/* 結果(8 行,Carter, Thomas 出現兩次)
E_Name
Zhang, Hua
Wang, Wei
Carter, Thomas
Yang, Ming
Adams, John
Bush, George
Carter, Thomas
Gates, Bill
*/
SELECT DISTINCT E_Name FROM (
SELECT E_Name FROM Employees_China
UNION ALL
SELECT E_Name FROM Employees_USA
) AS t;
效能優於直接 UNION(可利用索引/流式聚合)。
SELECT 'China' AS Source, E_Name FROM Employees_China
UNION ALL
SELECT 'USA' AS Source, E_Name FROM Employees_USA;
SELECT E_Name FROM Employees_China
UNION ALL
SELECT E_Name FROM Employees_USA
ORDER BY E_Name; -- 整體排序
ORDER BY(無意義且浪費資源)。CAST/CONVERT,避免隱式轉換失敗或精度損失。UNION 對 TEXT/NTEXT/IMAGE 不支援(需轉 VARCHAR(MAX)/VARBINARY(MAX))。