okinawa

IT勉強メモ

【SQL】テーブル同士の比較

テーブル同士の比較

テーブル同士が等しいか異なるかを集合演算子で華麗に比較する方法。

もしテーブルAとテーブルBが完全に等しければ、UNIONの結果とINTERSECTの結果も等しい。

もしテーブルAとテーブルBが異なれば、UNIONの方がINTERSECTより必ず大きくなる。


↑真ん中が完全に等しいとき。

   元テーブル(classb classd classe)

・classBとclassDで比較

select
case when count(*) = 0
     then '等しい'
     else '異なる'
end result
 from((
SELECT * FROM classb
union 
SELECT * FROM classd
)
except
(
select * from classb
intersect
SELECT * FROM classd
)) as inte

結果:異なる

・classBとclassEで比較

select
case when count(*) = 0
     then '等しい'
     else '異なる'
end result
 from((
SELECT * FROM classb
union 
SELECT * FROM classe
)
except
(
select * from classb
intersect
SELECT * FROM classe
)) as inte

結果:等しい

テーブルの中身を一切知らなくても比較できるSQL
集合指向っぽくてとても良き。

参考書籍

達人に学ぶSQL徹底指南書 第2版 初級者で終わりたくないあなたへ(ミック)|翔泳社の本