複数のSELECT結果の差を取得するEXCEPT(差集合)
SQL Serverでは複数のSELECT結果の差(差集合)を取得することができます。
差集合は「EXCEPT」を使用します。例えば、テーブル1とテーブル2があり、テーブル1だけに存在するレコードを検索したいときに「EXCEPT」を使用します。
EXCEPTはいわゆる差集合です。特定テーブルだけに存在するレコードの抽出です。
EXCEPT
- 複数のSELECT結果の差を取得する
サンプルデータ
act_baseball テーブル(野球部)
studentno | studentname |
15 | 佐藤太郎 |
20 | 山田一郎 |
44 | 田中花子 |
act_soccer テーブル(サッカー部)
studentno | studentname |
8 | 伊藤一 |
10 | 加藤和也 |
44 | 田中花子 |
例1. EXCEPTで2つのテーブルの差を検索するパターン
--野球部にだけ所属しサッカー部には所属していないメンバーを取得する SELECT studentno,studentname FROM act_baseball EXCEPT SELECT studentno,studentname FROM act_soccer ORDER BY 1;
<結果>
studentno | studentname |
15 | 佐藤太郎 |
20 | 山田一郎 |
EXCEPTを使用することで複数テーブル同士のSELECT結果の差を取得することができます。
上の例では、野球部に所属しサッカー部に所属していないメンバー、つまり野球部だけに所属しているメンバーを取得しました。
EXCEPTで差を抽出するテーブルは、2つだけでなく3つでも4つでもそれ以上でも差を取得できます。
注意点としては、テーブルの列は同じ数でないといけません。ここでは1つ目のSELECTが「studentno,studentname」の2列なので、それ以降のSELECTも2列である必要があります。
以上、SQL Serverで複数のSELECT結果の差を取得する(差集合)するEXCEPTでした。
コメント
–野球部とサッカー部の両方に所属しているメンバーを取得する
このコメント嘘では?
コメントに誤りがありましたので修正しました。
ご指摘ありがとうございます。