sql中union和union all的用法

安全劍客發表於2020-12-31
如果我們需要將兩個select語句的結果作為一個整體顯示出來,我們就需要用到union或者union all關鍵字。union(或稱為聯合)的作用是將多個結果合併在一起顯示出來。

union和union all的區別是,union會自動壓縮多個結果集合中的重複結果,而union all則將所有的結果全部顯示出來,不管是不是重複。

sql中union和union all的用法sql中union和union all的用法

union用法

目的:查詢出members表中group_id = 1和group_id為null的成員:

select m.member_name from members m where m.group_id = 1
union
select m.member_name from members m where m.group_id is null;

結果:

sql中union和union all的用法sql中union和union all的用法

分析:將上面查詢的結果和下面的查詢結果組合在了一起。會發現一個問題,“小珩”這條資料只展示了一遍,但是我們有兩個小珩呀。所以union會對查到的結果進行去重處理。

union all用法

目的:解決union遇到的問題,將所有查到的結果查詢出來:

select m.member_name from members m where m.group_id = 1
union all
select m.member_name from members m where m.group_id is null;

結果:

sql中union和union all的用法sql中union和union all的用法

分析:可以看到“小珩”的資料展示了兩次,即union all會將查到的結果直接全部展示出來。

總結1:join/union的感性認識&區別

join聯結的兩個表,是透過匹配兩個表中相同欄位的相同的值,得到的結果集。可以認為是結果集的列拓寬了。join是使得查詢的內容更詳細了。union是取將兩個結果集的並集,但兩個結果集所擁有的列數是一樣、列的順序也一樣、欄位型別相同或相似(DBMS認為的相似),才能union並展示在一起。可以認為是結果集的行數多了。union是使得查詢的結果更多了。

總結2:union/union all的感性認識&區別

union:對兩個結果集進行並集操作,不包括重複行,同時進行預設規則的排序;union在進行錶連結後會篩選掉重複的記錄,所以在錶連結後會對所產生的結果集進行排序運算,刪除重複的記錄再返回結果。實際大部分應用中是不會產生重複的記錄,最常見的是過程表與歷史表union。union all:對兩個結果集進行並集操作,包括重複行,不進行排序; 如果返回的兩個結果集中有重複的資料,那麼返回的結果集就會包含重複的資料了。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31559985/viewspace-2746793/,如需轉載,請註明出處,否則將追究法律責任。

相關文章