使用 UNION 運算子

已完成

UNION 運算子允許將兩個以上的查詢結果集,合併成單一結果集。 有兩種作法:

  • UNION - 合併的結果不含重複項目。
  • UNION ALL - 合併的結果集包含重複項目。

提示

一個集合中的 NULL 視同另一個集合中的 NULL。

使用 UNION 合併結果集時,有兩個規則:

  • 在所有查詢中,資料行的數目和順序都必須相同。
  • 資料類型必須相容。

注意

UNION 與 JOIN 不同。 JOIN 比較兩個資料表的資料行,以建立由兩個資料表的資料列所組成的結果集。 UNION 將兩個結果集串連在一起:第一個結果集的所有資料列都附加至第二個結果集的資料列。

簡單舉例,假設有兩份客戶名單及其傳回的結果集。 第一個查詢傳回 CustomerID 介於 1 到 9 之間的客戶。

SELECT CustomerID, companyname, FirstName + ' ' + LastName AS 'Name'
FROM SalesLT.Customer
WHERE CustomerID BETWEEN 1 AND 9; 

A screenshot that shows results from the first SELECT statement.

第二個查詢傳回 CustomerID 介於 10 到 19 之間的客戶。

SELECT customerid, companyname, FirstName + ' ' + LastName AS 'Name'
FROM saleslt.Customer
WHERE customerid BETWEEN 10 AND 19;

A screenshot that shows results from the second SELECT statement.

若要將這兩個查詢合併成相同的結果集,請使用 UNION 運算子:

SELECT customerid, companyname, FirstName + ' ' + LastName AS 'Name'
FROM saleslt.Customer
WHERE customerid BETWEEN 1 AND 9
UNION
SELECT customerid, companyname, FirstName + ' ' + LastName AS 'Name'
FROM saleslt.Customer
WHERE customerid BETWEEN 10 AND 19; 

這是傳回的結果集:

A screenshot that shows results from the UNION statement.

如同所有 Transact-SQL 陳述式,除非明確指定,否則不保證排序次序。 如果您需要排序的輸出,請在第二個查詢結尾新增 ORDER BY 子句。

使用 UNION 或 UNION ALL 時,兩個查詢必須有相同的資料行數目,而且資料行必須是相同的資料類型,您才能聯結不同查詢的資料列。