Share via


使用 UNION 合併結果集

UNION 運算子可讓您將二或多個 SELECT 陳述式的結果合併成一個結果集。使用 UNION 合併的結果集必須全都擁有相同的結構。它們必須擁有相同的資料行個數,而對應的結果集資料行也必須擁有相容的資料類型。如需詳細資訊,請參閱<使用 Union 的指導方針>。

UNION 將指定成:

select_statement UNION [ALL] select_statement

例如,Table1Table2 擁有相同的兩個資料行結構。

TABLE1

 

 

TABLE2

 

COLUMNA

COLUMNB

 

COLUMNC

COLUMND

CHAR(4)

INT

 

CHAR(4)

INT

-------

---

 

-------

---

ABC

  1

 

GHI

  3

DEF

  2

 

JKL

  4

GHI

  3

 

MNO

  5

此查詢將在資料表之間建立 UNION:

SELECT * FROM Table1
UNION
SELECT * FROM Table2

以下為結果集:

ColumnA  ColumnB
-------  --------
abc      1
def      2
ghi      3
jkl      4
mno      5

UNION 的結果集資料行名稱和 UNION 內的第一個 SELECT 陳述式之結果集資料行名稱一樣。其他 SELECT 陳述式的結果集資料行名稱將被忽略。

依據預設,UNION 運算子會從結果集中移除重複的資料列。若您使用 ALL,所有的資料列都將包含於結果之中,重複的資料列並不會移除。

UNION 運算的精確結果取決於安裝時選擇的定序,以及 ORDER BY 子句。如需有關不同定序之效果的詳細資訊,請參閱<使用定序>。

您可將任意個數的 UNION 運算子放在 Transact-SQL 陳述式內。例如:

SELECT * FROM TableA
UNION
SELECT * FROM TableB
UNION
SELECT * FROM TableC
UNION
SELECT * FROM TableD

根據預設,SQL Server 2005 會由左至右評估包含 UNION 運算子的陳述式。您可使用括號來指定評估的順序。例如,下列陳述式並不相等:

/* First statement. */
SELECT * FROM TableA
UNION ALL
(   SELECT * FROM TableB
   UNION
   SELECT * FROM TableC
)
GO

/* Second statement. */
(SELECT * FROM TableA
 UNION ALL
 SELECT * FROM TableB
)
UNION
SELECT * FROM TableC)
GO

備註

在第一個陳述式中,TableBTableC 之間聯集內的重複項目將被去除。在該集合與 TableA 的聯集中,重複項目並不會被去除。在第二個陳述式內,重複項目將包含於 TableATableB 之間的聯集之中,但在接下來與 TableC 的聯集中將被去除。ALL 並不會影響此運算式的最後結果。

在使用 UNION 時,個別的 SELECT 陳述式不能有它們自己的 ORDER BY 或 COMPUTE 子句。在最後的 SELECT 陳述式後面只能有一個 ORDER BY 或 COMPUTE 子句,它將套用到最後的合併結果集。GROUP BY 與 HAVING 只能指定於個別的 SELECT 陳述式內。

請參閱

概念

使用 UNION、EXCEPT 和 INTERSECT 搭配其他 Transact-SQL 陳述式

其他資源

UNION (Transact-SQL)

說明及資訊

取得 SQL Server 2005 協助