oracle 獲取兩張表的差集_oracle 中 取兩個表的交集 差集的問題


Oracle數據庫SQL語句查詢結果求交集、並集、差集

1.交集
  INTERSECT
2.差集
  minus
3.並集
 union 排除重復記錄 union all 包含重復記錄

1.交集

intersect運算:返回查詢結果中相同的部分。

    SELECT product_id FROM tab1 
    INTERSECT  
    SELECT product_id FROM tab2;  

2.差集
minus運算:返回在第一個查詢結果中存在與第二個查詢結果不存在的差集。

  SELECT product_id FROM tab1
  MINUS  
  SELECT product_id FROM tab2; 

注:MINUS 前后兩條sql調換位置查詢結果不同

3.並集
union/union all運算:將查詢的返回組合成一個結果,union合並結果並且將重復的內容取唯一,union all合並結果並且沒有過濾重復內容

    SELECT product_id FROM tab1  
    UNION  
    SELECT product_id FROM tab2;  
      
    SELECT location_id  FROM tab1  
    UNION ALL   
    SELECT location_id  FROM tab2;

注:UNION  會將前后兩條sql查詢結果的重復數據去重  UNION ALL不會

 總結:

1、intersect運算 返回查詢結果中相同的部分既他們的交集 SQL> select * from abc   2  intersect   3  select * from abc2 ;

2、minus運算 返回在第一個查詢結果中與第二個查詢結果不相同的那部分行記錄, 即兩個結果的差集 SQL> select * from abc2   2  minus   3  select * from abc ;

3、Union-Union all   

       (1)UNION在進行表鏈接后會篩選掉重復的記錄,所以在表鏈接后會對所產生的結果集進行排序運算,刪除重復的記錄再返回結果   

      (2)UNION ALL只是簡單的將兩個結果合並后就返回。如果返回的兩個結果集中有重復的數據,返回的結果集就會包含重復的數據      注:從效率上說,UNION ALL要比UNION快很多,如果可以確認合並的兩個結果集中不包含重復的數據的話,就使用UNION ALL 使用 UNION 組合查詢的結果集有兩個最基本的規則: (1)所有查詢中的列數和列的順序必須相同。 (2)數據類型必須兼容 Union: SQL> select d.code,d.name from abc d   2  union   3  select e.code,e.name from abc3 e ;

 


免責聲明!

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



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