SQL UNION

摘要:在本教程中,您將學習如何使用 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 運算子示例 #

假設我們有兩個表 AB

表 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 運算子的工作原理:

SQL UNION ALL

UNION 運算子實際示例 #

以下是來自 HR 示例資料庫employeesdependents 表:

employees_dependents_tables

以下查詢使用 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 放在第二個查詢中,以對最終結果集中的行進行排序。

測驗 #

資料庫 #

本教程是否有幫助?
© .