select查詢中union連線符

langgufu314發表於2012-07-11

UNION 運算子將多個 SELECT 語句的結果組合成一個結果集。
(1)使用 UNION 須滿足以下條件:
A:所有查詢中必須具有相同的結構(即查詢中的的列數和列的順序必須相同)。
B:對應列的資料型別可以不同但是必須相容(所謂的相容是指兩種型別之間可以進行隱式轉換,不能進行隱式轉換則報錯)。也可以用顯式轉換為相同的資料型別。
(當資料型別不同時,則根據資料型別優先順序規則確定所產生的資料型別。如果型別相同,但精度、小數位數或長度不同,則根據用於合併表示式的相同規則來確定結果)
C:如果為XML資料型別則列必須等價(所有列都必須型別化為 XML 架構,或者為非型別化),如果型別化,這些列必須型別化為相同的 XML 架構集合。

(2)UNION結果集
A:UNION 後的結果集的列名與 第一個 SELECT 語句的結果集中的列名相同。另一個 SELECT 語句的結果集列名將被忽略。
B:UNION預設的刪除結果集中重複的記錄,如果使用 ALL 關鍵字則在結果集中保留所有記錄(保留重複記錄)

(3)注意點
A: Transact-SQL 語句中可以使用多個 UNION 運算子
B:在使用了 UNION 運算子的各個 SELECT 語句不能包含它們自己的 ORDER BY 或 COMPUTE 子句。而只能在最終的組合結果集(即最後一個 SELECT 語句的後面)使用一個 ORDER BY 或 COMPUTE 子句。
C:在使用了 UNION 運算子的各個 SELECT 語句中可以使用 GROUP BY 和 HAVING 子句。
D:預設情況下,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
在第一個語句中,將消除 TableB 與 TableC 的並集中的重複行。而在該集與 TableA 的並集中,將不消除重複行。在第二個語句中,TableA 與TableB 的並集中將包含重複行,但在隨後與 TableC 的並集中將消除重複行。ALL 關鍵字對此表示式的最終結果沒有影響。

相關文章