摘要:在本教程中,您將學習如何使用 SQL UNION 運算子將兩個 SELECT 語句的結果集合併為一個結果集。
SQL UNION 運算子簡介 #
UNION 運算子允許您將兩個 SELECT 語句的結果集合併為一個結果集。
這是 UNION 運算子的語法:
SELECT
column1, column2
FROM
table1
UNION
SELECT
column3, column4
FROM
table2;Code language: SQL (Structured Query Language) (sql)在此語法中,您使用 UNION 運算子將第一個查詢與第二個查詢連線起來。
以下是使用 UNION 運算子的一些規則:
- 列數相同:
SELECT語句必須具有相同數量的列。 - 資料型別相容: 每個
SELECT語句中對應的列必須具有相容的資料型別。 - 列名:第二個查詢的列名將決定最終結果集的列名。
- 執行順序:
UNION運算子會獨立執行各個SELECT語句,然後合併結果集。 - 結果集排序:在第二個查詢中使用
ORDER BY子句對最終結果集中的行進行排序。
UNION 運算子會從合併後的結果集中移除重複的行。要保留重複的行,您可以使用 UNION ALL 運算子。
SELECT
column1, column2
FROM
table1
UNION ALL
SELECT
column3, column4
FROM
table2;Code language: SQL (Structured Query Language) (sql)SQL UNION 運算子示例 #
假設我們有兩個表 A 和 B:
表 A
| id |
|---|
| 1 |
| 2 |
表 B
| id |
|---|
| 2 |
| 3 |
以下查詢使用 UNION 運算符合並從表 A 和表 B 檢索資料的查詢結果集:
SELECT
id
FROM
a
UNION
SELECT
id
FROM
b
ORDER BY
id;Code language: SQL (Structured Query Language) (sql)輸出
id
----
1
2
3Code language: plaintext (plaintext)SQL UNION ALL 運算子示例 #
以下查詢使用 UNION ALL 運算符合並從表 A 和表 B 檢索資料的查詢結果集:
SELECT
id
FROM
a
UNION ALL
SELECT
id
FROM
b
ORDER BY
id;Code language: SQL (Structured Query Language) (sql)輸出
id
----
1
2
2
3Code language: plaintext (plaintext)結果集包含了重複的行 (2)。
下圖說明了 UNION ALL 運算子的工作原理:

UNION 運算子實際示例 #
以下是來自 HR 示例資料庫 的 employees 和 dependents 表:

以下查詢使用 UNION 運算子建立一個包含員工及其家屬姓名(名字和姓氏)的列表:
SELECT
first_name,
last_name
FROM
employees
UNION
SELECT
first_name,
last_name
FROM
dependents
ORDER BY
first_name,
last_name;Code language: SQL (Structured Query Language) (sql)輸出
first_name | last_name
-------------+-------------
Adam | Fripp
Alec | Partners
Alexander | Hunold
Alexander | Khoo
Bette | De Haan
Bob | Hartstein
Britney | Everett
...Code language: plaintext (plaintext)最終結果集包含了員工和家屬的姓名。如果能增加一列來指明是員工還是家屬,效果會更好。
合併帶有附加列的資料 #
在使用 UNION 運算子時,您可以在 SELECT 語句中包含一個附加列。
例如,以下查詢添加了 role 列,以在合併的結果集中區分員工和家屬:
SELECT
first_name,
last_name,
'Employee' AS role
FROM
employees
UNION
SELECT
first_name,
last_name,
'Dependent' AS role
FROM
dependents
ORDER BY
first_name,
last_name;Code language: SQL (Structured Query Language) (sql)輸出
first_name | last_name | role
-------------+-------------+-----------
Adam | Fripp | Employee
Alec | Partners | Dependent
Alexander | Hunold | Employee
Alexander | Khoo | Employee
Bette | De Haan | Dependent
Bob | Hartstein | Dependent
Britney | Everett | Employee
...Code language: plaintext (plaintext)摘要 #
- 使用
UNION運算子將兩個查詢的結果集合併為一個結果集。 UNION運算子會從最終結果集中移除重複的行。- 使用
UNION ALL運算子來保留重複的行。 - 將
ORDER BY放在第二個查詢中,以對最終結果集中的行進行排序。
測驗 #
資料庫 #
- PostgreSQL UNION 運算子
- MySQL UNION 運算子
- SQLite UNION 運算子
- Db2 UNION 運算子
- Oracle UNION 運算子
- SQL Server UNION 運算子
本教程是否有幫助?