SQL Union運算子


本教學將演示如何使用SQL UNION組合來自多個查詢的兩個或多個結果集,並解釋UNIONUNION 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運算子來組合來自不同表的資料。 請參閱以下employeesdependents表:

以下語句使用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運算子組合來自多個查詢的兩個或多個結果集。