【SQL Server】EXCEPT で差(差集合)を取得する

複数の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でした。

コメント

  1. しぇん より:

    –野球部とサッカー部の両方に所属しているメンバーを取得する

    このコメント嘘では?

    • sqlserverマスター より:

      コメントに誤りがありましたので修正しました。
      ご指摘ありがとうございます。