SQL中 UNION 和 UNION ALL 操作符小結


SQL中 UNIONUNION ALL 操作符小結

1UNIONUNION ALL 操作符用於合並兩個或多個 SELECT 語句的結果集【適用場景】
2UNIONUNION ALL 內部的 SELECT 語句必須擁有相同數量的列。列也必須擁有相似的數據類型,即數據類型必須兼容。同時,每條 SELECT 語句中的列的順序必須相同。
3UNIONUNION ALL 結果集中的列名總是等於 UNION(ALL)中第一個 SELECT 語句中的列名
4UNIONUNION ALL 這兩者從使用和效率上來說都有所不同。如果可以確認合並的兩個結果集中不包含重復的數據的話,那么就使用union all
   1)對重復結果的處理:UNION在進行表鏈接后會篩選掉重復的記錄,Union All不會去除重復記錄
   2)對排序的處理:Union將會按照字段的順序進行排序;UNION ALL只是簡單的將兩個結果合並后就返回
   3)從效率上說: UNION ALL 要比 UNION 快很多
5UNION 其實執行的實質邏輯應該是先將某一子結果集進行排序,然后再判斷是否有重復的數據,若有則刪除掉重復的數據

簡單總結: UNION 對兩個結果集進行並集操作,不包括重復行去重,同時進行默認規則的排序
          UNION ALL 對兩個結果集進行並集操作,包括重復行,不進行排序; 
          
          由於Union需要對查詢結果集進行排序操作,當數據量較大時,若非特殊需要,盡量不要使用Union操作,而改用Union All操作,
          然后對Union All出來的結果執行去重操作即可,這樣會使得查詢的效率大大的增強

注意:bolb類型,oracle union查詢中BLOB字段出錯問題(謝謝網友moon的補充

     select blobf from table1

     union

    select blobf from table2
   出錯:ora-00932:數據類型不一致
    因為:union會對字段類型進行比較(相等和不等判斷),oracle不支持對大數據類型的比較操作。 
    解決辦法:使用union all就可以了





免責聲明!

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



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