聯集(UNION)指令為四種集合(SET)運算的一種,用途是將兩個(含以上)SQL指令所產生結果進行合併,以下將採用MSSQL指令測試,利用聯集運算指令產生虛擬記錄,其中UNION及UNION ALL兩個指令之差異在於是否會剔除重複的資料在此將進行測試。
UNION ALL
|
UNION
|
|||||||||
SQL
|
SELECT 'B' AS COL
UNION ALL
SELECT 'A' AS Val
UNION ALL
SELECT 'B' AS Result
|
SELECT 'B' AS COL
UNION
SELECT 'A' AS Val
UNION
SELECT 'B' AS Result
|
||||||||
結果
|
|
|
1. 排序
2. 剔除重複『B』
|
上表中,由UNION ALL產生結果(結果為B, A, B)可得知,是將各子查詢的資料集合併後直接輸出;由UNION的結果(A, B, B),系統將剔除重複資料,且結果中資料已被排序。此外,當進行聯集運算時,需注意各資料集的欄位數目需一致,以及各資料集中相同欄位的型態必須相容的限制條件,運算後的欄位名稱則直接採用第一個資料集的欄位名稱。
由於UNION指令將剔除重複資料,概念上先將資料合併後再執行DISTINCT指令以剔除重複資料,為達此目的需先進行資料排序(演算法概念),採用前需思考剔除重複資料之必要,尤其大量資料處理時,將造成Memory或I/O耗用問題(一旦使用到磁碟為排序暫存空間,則系統效能會大幅降低),如無必要則請使用UNION ALL指令。兩者差異整理如下表所示:
圖示
|
說明
|
UNION
ü 重複資料只顯示一次
ü 刪除重複資料(相當於DISTINCT)
|
|
UNION ALL
ü 所有資料都會顯示,不管是否重複
ü 不會刪除重複資料,較佳的執行效能
|
UNION ALL指令是將各子查詢的資料集直接合併,UNION指令則是合併後排序並剔除重複資料;因UNION需排序動作故將耗用較多之資源,使用上要多加注意。
沒有留言:
張貼留言