SQL Union運算符
本教程將演示如何使用SQL UNION
組合來自多個查詢的兩個或多個結果集,並解釋UNION
和UNION ALL
之間的區別。
1. SQL UNION運算符簡介
UNION
運算符將兩個或多個SELECT語句的結果集合併到一個結果集中。 以下語句說明了如何使用UNION
運算符組合兩個查詢的結果集:
SELECT
column1, column2
FROM
table1
UNION [ALL]
SELECT
column3, column4
FROM
table2;
要使用UNION
運算符,可以編寫單獨的SELECT
語句,並通過關鍵字UNION
將它們連接起來。
SELECT
語句返回的列必須具有相同或可轉換的數據類型,大小和相同的順序。
數據庫系統首先執行兩個SELECT
語句來處理查詢。 然後,它將兩個單獨的結果集合併爲一個,並消除重複的行。 爲了消除重複的行,數據庫系統對每列的組合結果進行排序,並掃描它以查找彼此相鄰的匹配行。
要保留結果集中的重複行,請使用UNION ALL
運算符。
假設我們有兩個結果集A(1,2)
和B(2,3)
。 下圖說明了A UNION B
結果:
以下圖片說明了A UNION ALL B
的結果:
聯合與聯接不同,聯接組合了多個表的列,而聯合組合了表的行。
2. SQL UNION示例
要從A
表中獲取數據,請使用以下SELECT
語句:
SELECT
id
FROM
A;
執行上面查詢語句,得到以下結果:
SELECT
id
FROM
A;
要從B
表中檢索數據,請使用以下語句:
mysql> SELECT
id
FROM
B;
+----+
| id |
+----+
| 2 |
| 3 |
+----+
2 rows in set
要組合這兩個查詢的結果集,請使用UNION
運算符,如下所示:
SELECT
id
FROM
a
UNION
SELECT
id
FROM
b;
執行上面查詢語句,得到以下結果:
+----+
| id |
+----+
| 1 |
| 2 |
| 3 |
+----+
3 rows in set
結果集僅包含3
行,因爲UNION
運算符刪除了一個重複行。
3. SQL UNION ALL示例
要保留重複行,請使用UNION ALL
運算符,如下所示:
SELECT
id
FROM
a
UNION ALL
SELECT
id
FROM
b;
執行上面查詢語句,得到以下結果:
+----+
| id |
+----+
| 1 |
| 2 |
| 2 |
| 3 |
+----+
4 rows in set
4. SQL UNION帶有ORDER BY示例
要對結果集進行排序,請在所有SELECT
語句之後放置ORDER BY
子句,如下所示:
SELECT
id
FROM
a
UNION
SELECT
id
FROM
b
ORDER BY id DESC;
執行上面查詢語句,得到以下結果:
+----+
| id |
+----+
| 3 |
| 2 |
| 1 |
+----+
3 rows in set
數據庫系統執行以下步驟:
- 首先,分別執行每個
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;
執行上面查詢語句,得到以下結果:
+------------+-----------+
| first_name | last_name |
+------------+-----------+
| Grace | Chen |
| Dan | Chen |
| Daniel | Chen |
| Matthew | Chen |
| John | Chen |
| Valli | Chen |
| Diana | Chen |
| Helen | Chen |
| Nancy | Chen |
| Karl | Chen |
| Matthew | Han |
.....
| Guy | Zhang |
| Karen | Zhang |
| Ed | Zhao |
| Britney | Zhao |
| Jennifer | Zhao |
| Susan | Zhou |
| Uma | Zhou |
| Bob | Zhou |
| Lucille | Zhou |
| Michael | Zhou |
| Pat | Zhou |
+------------+-----------+
70 rows in set
在本教程中,您學習瞭如何使用UNION
運算符組合來自多個查詢的兩個或多個結果集。