不同數據庫取並集、交集、差集


一.並集:

需求:匯總t1、t2兩表的數據

mysql、postgresql、oracle數據庫取並集都是用union/union all關鍵字,不再贅述

二.交集:

需求:選出既在t1表又在t2表的數據

1.mysql數據庫取交集,沒有對應的關鍵字,只能把所有要查詢的字段都加到where條件上,如下

select t1.name, t1.age from t1, t2 where t1.name = t2.name and t1.age = t2.age   //如果t1, t2不是表而只是結果集的話,只需要加上with t1 as(...), t2 as (...)就可以了

2.postgresql/oracle數據庫取交集,可以用intersect關鍵字,如下

select t1.name, t1.age from t1

intersect

select t2.name, t2.age from t2

三.差集:

需求:選出在t1表中但不在t2表中的數據

1.mysql數據庫取差集,也沒有對應的關鍵字,有2種方式:

①.用not in

select name, age from t1

where (t1.name, t1.age) not in (select name, age from t2)

注意,where后面字段如果有多個,必須用括號括起來,同時子查詢語句也必須用括號括起來

not in這種方式雖然寫法簡單,但是如果兩個表的數據很多的話,那查詢起來非常慢

②.用連表查詢

sql92:

select t1.name, t1.age from t1

where t1.name != t2.name or t1.age != t2.age

或是

sql99:

select t1.name, t1.age inner join t2

on t1.name != t2.name or t1.age != t2.age

當然,如果t1、t2有多個字段的話,就要一個一個比對,然后用or連接起來

必須用內連接,這點想想左連接和右連接查出的結果集就明白了。

2.postgresql取差集,可以用except關鍵字,如下:

select t1.name, t1.age from t1

except

select t2.name, t2.age from t2

3.oracle數據庫取差集,可以用minus關鍵字,如下

select t1.name, t1.age from t1

minus

select t2.name, t2.age from t2

 


免責聲明!

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



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