≫ トップ ≫ DML ≫ 選択 (集合演算子) ≫ 複数の検索結果の差集合を取得する
ここでは複数の検索結果の差集合を取得する方法を説明します.差集合とは,ある集合から指定された他の集合を除いた要素の集合をいいます.差集合をベン図で示すと以下のようになります.
複数の検索結果の差集合を取得するにはEXCEPT句もしくはMINUS句を使用します.どちらの構文を使用するかはお使いのDBMSによって異なります.また残念ながらAccessとMySQLには対応する構文はサポートされていません.以下に各DBMSごとに使用可能なSQLを示します.
DBMS | SQL |
---|---|
Access | 対応していない |
SQLServer | EXCEPT |
Oracle | MINUS |
MySQL | 対応していない |
PostgreSQL | EXCEPT |
EXCEPT句(MINUS句)を用いたSQLの基本的な書き方は以下とおりです.ここではEXCEPT句を使用して説明しますが,MINUS句も使い方は同じですので,Oracleをお使いの方はEXCEPTをMINUSに読み替えてください.
SELECT 列名1, 列名2, ... FROM テーブル名
EXCEPT
SELECT 列名1, 列名2, ... FROM テーブル名
EXCEPT句をはさんで,上の検索結果にあって下の検索結果にないデータ取得します.上記では簡単のためWHERE句などは省略していますが,もちろん通常のSELECT文で使用可能な構文はEXCEPT句で検索結果を統合する場合にも使用可能です.
例として以下の2つのテーブルから全レコードを取得し差集合を求めます.
従業員
従業員コード | 従業員名 |
---|---|
A0001 | チャーリー |
A0002 | ペパーミント |
受給者
受給者コード | 受給者名 |
---|---|
A0001 | チャーリー |
B0001 | スヌーピー |
B0002 | ウッドストック |
SQL
SELECT * FROM 従業員
EXCEPT
SELECT * FROM 受給者
結果
従業員コード | 従業員名 |
---|---|
A0002 | ペパーミント |
注意.
サンプルで使用するテーブルは説明のため正規化を行っていなかったり,一般的でない列が含まれている場合があります.ご容赦ください.