概要:このチュートリアルでは、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つの結果セットを比較するためにどのように適用するかを理解できたはずです。