摘要:本教學將說明如何使用 SQL UNION 來合併來自多個查詢的兩個或多個結果集,並解釋 UNION 和 UNION ALL 之間的差異。
SQL UNION 運算符介紹
UNION 運算符將兩個或多個 SELECT 語句的結果集合併為單個結果集。以下語句說明如何使用 UNION 運算符來合併兩個查詢的結果集。
SELECT
column1, column2
FROM
table1
UNION [ALL]
SELECT
column3, column4
FROM
table2;
Code language: SQL (Structured Query Language) (sql)
若要使用 UNION 運算符,請編寫個別的 SELECT 語句,並使用關鍵字 UNION 將它們連接起來。
SELECT 語句傳回的欄位必須具有相同或可轉換的資料類型、大小和相同的順序。
資料庫系統會先執行兩個 SELECT 語句來處理查詢。然後,它將兩個個別的結果集合併為一個,並刪除重複的資料列。若要刪除重複的資料列,資料庫系統會按每個欄位排序合併的結果集,並掃描它以尋找彼此相鄰的匹配資料列。
若要在結果集中保留重複的資料列,您可以使用 UNION ALL 運算符。
假設我們有兩個結果集 A(1,2) 和 B(2,3)。下圖說明 A UNION B

下圖說明 A UNION ALL B

UNION 與 JOIN 不同,JOIN 是合併多個表格的欄位,而 UNION 是合併表格的資料列。
SQL UNION 範例
SQL UNION 範例
若要從 A 表格取得資料,您可以使用下列 SELECT 語句
SELECT
id
FROM
A;
Code language: SQL (Structured Query Language) (sql)

若要從 B 表格擷取資料,您可以使用下列語句
SELECT
id
FROM
B;
Code language: SQL (Structured Query Language) (sql)

若要合併這兩個查詢的結果集,您可以使用 UNION 運算符,如下所示
SELECT
id
FROM
a
UNION
SELECT
id
FROM
b;
Code language: SQL (Structured Query Language) (sql)

結果集僅包含 3 列,因為 UNION 運算符會刪除一個重複的資料列。
SQL UNION ALL 範例
若要保留重複的資料列,您可以使用 UNION ALL 運算符,如下所示

SQL UNION 與 ORDER BY 範例
若要排序結果集,請將 ORDER BY 子句放在所有 SELECT 語句之後,如下所示
SELECT
id
FROM
a
UNION
SELECT
id
FROM
b
ORDER BY id DESC;
Code language: SQL (Structured Query Language) (sql)

資料庫系統會執行下列步驟
- 首先,個別執行每個 SELECT 語句。
- 其次,合併結果集並刪除重複的資料列,以建立合併的結果集。
- 第三,按 ORDER BY 子句中指定的欄位排序合併的結果集。
實際上,我們經常使用 UNION 運算符來合併來自不同表格的資料。請參閱以下 employees 和 dependents 表格

以下語句使用 UNION 運算符來合併員工和家屬的名字和姓氏。
SELECT
first_name,
last_name
FROM
employees
UNION
SELECT
first_name,
last_name
FROM
dependents
ORDER BY
last_name;
Code language: SQL (Structured Query Language) (sql)

在本教學中,您已學習如何使用 UNION 運算符來合併來自多個查詢的兩個或多個結果集。