SQL UNION

摘要:本教學將說明如何使用 SQL UNION 來合併來自多個查詢的兩個或多個結果集,並解釋 UNION 和 UNION ALL 之間的差異。

SQL UNION 運算符介紹

UNION 運算符將兩個或多個 SELECT 語句的結果集合併為單個結果集。以下語句說明如何使用 UNION 運算符來合併兩個查詢的結果集。

SELECT 
    column1, column2
FROM
    table1 
UNION [ALL]
SELECT 
    column3, column4
FROM
    table2;Code language: SQL (Structured Query Language) (sql)

若要使用 UNION 運算符,請編寫個別的 SELECT 語句,並使用關鍵字 UNION 將它們連接起來。

SELECT 語句傳回的欄位必須具有相同或可轉換的資料類型、大小和相同的順序。

資料庫系統會先執行兩個 SELECT 語句來處理查詢。然後,它將兩個個別的結果集合併為一個,並刪除重複的資料列。若要刪除重複的資料列,資料庫系統會按每個欄位排序合併的結果集,並掃描它以尋找彼此相鄰的匹配資料列。

若要在結果集中保留重複的資料列,您可以使用 UNION ALL 運算符。

假設我們有兩個結果集 A(1,2) 和 B(2,3)。下圖說明 A UNION B

SQL UNION

下圖說明 A UNION ALL B

SQL UNION ALL

UNION 與 JOIN 不同,JOIN 是合併多個表格的欄位,而 UNION 是合併表格的資料列

SQL UNION 範例

SQL UNION 範例

若要從 A 表格取得資料,您可以使用下列 SELECT 語句

SELECT 
    id
FROM
    A;Code language: SQL (Structured Query Language) (sql)
Table A data

若要從 B 表格擷取資料,您可以使用下列語句

SELECT 
    id
FROM
    B;Code language: SQL (Structured Query Language) (sql)
Table B data

若要合併這兩個查詢的結果集,您可以使用 UNION 運算符,如下所示

SELECT
	id
FROM
	a
UNION
SELECT
	id
FROM
	b;Code language: SQL (Structured Query Language) (sql)
SQL UNION example

結果集僅包含 3 列,因為 UNION 運算符會刪除一個重複的資料列。

SQL UNION ALL 範例

若要保留重複的資料列,您可以使用 UNION ALL 運算符,如下所示

SQL UNION ALL example

SQL UNION 與 ORDER BY 範例

若要排序結果集,請將 ORDER BY 子句放在所有 SELECT 語句之後,如下所示

SELECT
	id
FROM
	a
UNION
SELECT
	id
FROM
	b
ORDER BY id DESC;Code language: SQL (Structured Query Language) (sql)
SQL UNION ORDER BY example

資料庫系統會執行下列步驟

  1. 首先,個別執行每個 SELECT 語句。
  2. 其次,合併結果集並刪除重複的資料列,以建立合併的結果集。
  3. 第三,按 ORDER BY 子句中指定的欄位排序合併的結果集。

實際上,我們經常使用 UNION 運算符來合併來自不同表格的資料。請參閱以下 employees 和 dependents 表格

employees_dependents_tables

以下語句使用 UNION 運算符來合併員工和家屬的名字和姓氏。

SELECT
	first_name,
	last_name
FROM
	employees
UNION
SELECT
	first_name,
	last_name
FROM
	dependents
ORDER BY
	last_name;Code language: SQL (Structured Query Language) (sql)

試試看

SQL UNION practical example

在本教學中,您已學習如何使用 UNION 運算符來合併來自多個查詢的兩個或多個結果集。

這個教學有幫助嗎?