概要:このチュートリアルでは、SQLのMINUS演算子を使用して、ある結果セットから別の結果セットを減算する方法を学びます。
SQL MINUS演算子の概要
SQLには、UNION
、UNION ALL
、およびINTERSECT
演算子に加えて、ある結果セットから別の結果セットを減算できるMINUS
演算子が用意されています。
以下に、MINUS
演算子の構文を示します。
SELECT
id
FROM
A
MINUS
SELECT
id
FROM
B;
Code language: SQL (Structured Query Language) (sql)
MINUS
演算子を使用するには、個々のSELECT
ステートメントを記述し、それらの間にMINUS
演算子を配置します。MINUS
演算子は、最初のクエリで生成されたが、2番目のクエリでは生成されなかった一意の行を返します。
次の図は、MINUS
演算子を示しています。

結果セットを作成するために、データベースシステムは2つのクエリを実行し、最初のクエリの結果セットを2番目のクエリから減算します。
MINUS
演算子を使用するには、SELECT
句の列の数が一致する必要があり、同じデータ型または、少なくとも変換可能なデータ型である必要があります。
MINUS
演算子は、ETLでよく使用されます。ETLは、データウェアハウスシステムのソフトウェアコンポーネントです。ETLは、Extract(抽出)、Transform(変換)、およびLoad(ロード)の略です。ETLは、ソースシステムからデータウェアハウスシステムへのデータのロードを担当します。
MINUS
演算子を使用して、ターゲットシステムのデータをソースシステムのデータから減算することで、データが完全にロードされたことを確認できます。SQL MINUSの例
サンプルデータベースの次のemployees
テーブルとdependents
テーブルについて考えてみましょう。

各従業員には0人以上の扶養者がいますが、各扶養者は1人の従業員にのみ依存しています。扶養者と従業員の関係は、一対多の関係です。
dependents
テーブルのemployee_id
列は、employees
テーブルのemployee_id
列を参照します。
MINUS
演算子を使用して、扶養者がいない従業員を見つけることができます。これを行うには、dependents
テーブルのemployee_id
結果セットからemployees
テーブルのemployee_id
結果セットを減算します。
次のクエリは、その考え方を説明しています
SELECT
employee_id
FROM
employees
MINUS
SELECT
employee_id
FROM
dependents;
Code language: SQL (Structured Query Language) (sql)

ORDER BYを使用したSQL MINUSの例
MINUS
演算子によって返された結果セットを並べ替えるには、最後のSELECT
ステートメントの最後にORDER BY
句を配置します。
たとえば、扶養者がいない従業員を並べ替えるには、次のクエリを使用します
SELECT
employee_id
FROM
employees
MINUS
SELECT
employee_id
FROM
dependents
ORDER BY employee_id;
Code language: SQL (Structured Query Language) (sql)

これで、SQLのMINUS
演算子を十分に理解し、2つの結果セットを比較するためにどのように適用するかを理解できたはずです。