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 ;