【Oracle】MINUS で差分(差集合)を取得する【SQL】

【SQL】MINUS 複数のSELECT結果の差を取得する(差集合)

差集合

Oracleでは「MINUS」を使用して複数のSELECT結果の差(差集合)を取得することができます。

例えば、テーブルAとテーブルBがあり、テーブルAだけに存在し、テーブルBには存在しないレコードを検索したいときに「MINUS」を使用します。

「MINUS」はいわゆる差集合です。特定テーブルだけに存在するレコードの抽出です。

MINUS

  • 複数のSELECT結果の差を取得する

 

例1. MINUSで2つのテーブルの差を検索するパターン

--野球部のメンバーを取得する
SELECT stuno,stuname FROM act_baseball;
stuno stuname
15 佐藤太郎
20 山田一郎
44 田中花子

 

--サッカー部のメンバーを取得する
SELECT stuno,stuname FROM act_soccer;
stuno stuname
8 伊藤一
10 加藤和也
44 田中花子

 

--野球部だけに所属している(野球部に所属しサッカー部に所属していない)
--メンバーを取得する
SELECT stuno,stuname FROM act_baseball
MINUS
SELECT stuno,stuname FROM act_soccer
order by 1;
stuno stuname
15 佐藤太郎
20 山田一郎

OracleではMINUSを使用することで別テーブル同士のSELECT結果の差を取得することができます。

上の例では、野球部に所属していてサッカー部に所属していないメンバー、つまり野球部だけに所属しているメンバーを取得しました。

テーブルは2つだけでなく、MINUSで3つ・4つ以上のテーブルの差を取得できます。注意点としては、SELECTするテーブルの列は同じ数でないといけません。

以上、Oracleで複数のSELECT結果の差を取得する(差集合)するMINUSでした。

コメント