SQL Server中Union和Union All用法?


好久沒有更新博客了,可能是最近比較忙,總是忽略了一些事情,今天查了做了一些數據分析的數據,突然感覺對Union和Union all有些不太理解了,可能是自己老了吧,就翻了一些資料,進行回憶和學習,趁着這個下班的空余時間,做個小總結,希望可以幫到正在數據庫迷茫路上的你。

下邊我先貼出官方的解釋(自己的官方(*^__^*) 嘻嘻……):

UNION

操作符用於合並兩個或多個 SELECT 語句的結果集(不包括重復行,並進行默認規則的排序)。

請注意,UNION 內部的 SELECT 語句必須擁有相同數量的列。列也必須擁有相似的數據類型。同時,每條 SELECT 語句中的列的順序必須相同

UNION ALL

操作符用於合並兩個或多個 SELECT 語句的結果集(包括重復行,不進行排序)。

請注意,UNION 內部的 SELECT 語句必須擁有相同數量的列。列也必須擁有相似的數據類型。同時,每條 SELECT 語句中的列的順序必須相同

下邊進行語句測試,由於着急回家,我就不建庫、建表了,直接使用我現有的數據,有疑問可以給我留言。

測試如下:

第一步:SELECT * FROM YXBAK..TABLE1,TABLE1表內有一條重復的數據,總共10條數據。

 SELECT * FROM YXBAK..TABLE2,TABLE2表內有一條重復的數據,其中前10條數據是和TABLE1表數據一樣,總共20條數據。

 

 第二步:數據准備完成,進行Union和Union All的驗證,看結果如何。

執行Union語句連接兩表查詢,我們發現一共查詢出19條數據,我們准備的兩個表的數據一共是30條,分析:Union將兩個表內的重復數據進行剔除,並按序號進行排序。

SELECT * FROM YXBAK..TABLE1
UNION
SELECT * FROM YXBAK..TABLE2

執行Union All語句連接兩表查詢,我們發現一共查詢出30條數據,分析:Union All將兩個表內的進行合並,並未去重,且未按序號進行排序。

SELECT * FROM YXBAK..TABLE1
UNION ALL
SELECT * FROM YXBAK..TABLE2

 總結:

Union可能查非重復數據時用的比較多, 因為Union 是取唯一值,記錄沒有重復數據  

Union All是直接連接,取到得是所查詢表內的所有值,記錄可能有重復  

效率:

UNION和UNION ALL關鍵字都是將兩個結果集合並為一個,但這兩者從使用和效率上來說都有所不同。

1、對重復結果的處理:UNION在進行表鏈接后會篩選掉重復的記錄,Union All不會去除重復記錄。

2、對排序的處理:Union將會按照字段的順序進行排序;UNION ALL只是簡單的將兩個結果合並后就返回。

從效率上說,UNION ALL 要比UNION(需要去重和排序)快很多,所以,如果可以確認合並的兩個結果集中不包含重復數據且不需要排序時的話,那么就使用UNION ALL。

簡要回答:

UNION去重且排序,效率較低

UNION ALL不去重不排序,效率高

 

                                                                    每天積累一點點,希望可以幫到奮斗路上的你。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM