本教學將演示如何使用SQL UNION
組合來自多個查詢的兩個或多個結果集,並解釋UNION
和UNION ALL
之間的區別。
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
的結果:
聯合與聯接不同,聯接組合了多個表的列,而聯合組合了表的行。
要從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
運算子刪除了一個重複行。
要保留重複行,請使用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
運算子組合來自多個查詢的兩個或多個結果集。