| 運算子 | 行為 | 效能 |
|---|---|---|
UNION | 合併結果並去除重複行(隱含 DISTINCT) | 較慢,需排序/雜湊去重 |
UNION ALL | 直接合併保留所有行(含重複) | 極快,無額外處理 |
-- 去重合併
SELECT * FROM A
UNION
SELECT * FROM B;
-- 保留重複
SELECT * FROM A
UNION ALL
SELECT * FROM B;
需包裝子查詢,並使用第一個查詢的欄位名/別名排序:
SELECT *
FROM (
SELECT * FROM A
UNION ALL
SELECT * FROM B
) AS T
ORDER BY column_name;
SELECT * FROM (
SELECT TOP 2 id, adddate, title, url FROM bArticle WHERE ClassId='1' ORDER BY adddate DESC
) A
UNION ALL
SELECT * FROM (
SELECT TOP 2 id, adddate, title, url FROM bArticle WHERE ClassId='2' ORDER BY adddate DESC
) B
UNION ALL
SELECT * FROM (
SELECT TOP 2 id, adddate, title, url FROM bArticle WHERE ClassId='3' ORDER BY adddate DESC
) C
UNION ALL
SELECT * FROM (
SELECT TOP 2 id, adddate, title, url FROM bArticle WHERE ClassId='4' ORDER BY adddate DESC
) D;
SELECT * FROM (
SELECT id, adddate, title, url FROM bArticle WHERE ClassId='1' ORDER BY adddate DESC LIMIT 0,2
) A
UNION ALL
SELECT * FROM (
SELECT id, adddate, title, url FROM bArticle WHERE ClassId='2' ORDER BY adddate DESC LIMIT 0,2
) B
UNION ALL
SELECT * FROM (
SELECT id, adddate, title, url FROM bArticle WHERE ClassId='3' ORDER BY adddate DESC LIMIT 0,2
) C
UNION ALL
SELECT * FROM (
SELECT id, adddate, title, url FROM bArticle WHERE ClassId='4' ORDER BY adddate DESC LIMIT 0,2
) D;
ORDER BY、COMPUTE 僅能放在最後;GROUP BY/HAVING 僅能用於單獨查詢內部。INTO 子句只能出現在最終結果集。UNION CORRESPONDING(依欄位名自動對齊)。SELECT * 導致結構不一致。INSERT INTO ... SELECT 分批處理。