SQL MINUS

概要:このチュートリアルでは、SQLのMINUS演算子を使用して、ある結果セットから別の結果セットを減算する方法を学びます。

SQL MINUS演算子の概要

SQLには、UNIONUNION 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演算子を示しています。

SQL MINUS

結果セットを作成するために、データベースシステムは2つのクエリを実行し、最初のクエリの結果セットを2番目のクエリから減算します。

MINUS演算子を使用するには、SELECT句の列の数が一致する必要があり、同じデータ型または、少なくとも変換可能なデータ型である必要があります。

MINUS演算子は、ETLでよく使用されます。ETLは、データウェアハウスシステムのソフトウェアコンポーネントです。ETLは、Extract(抽出)、Transform(変換)、およびLoad(ロード)の略です。ETLは、ソースシステムからデータウェアハウスシステムへのデータのロードを担当します。

データロードが完了したら、MINUS演算子を使用して、ターゲットシステムのデータをソースシステムのデータから減算することで、データが完全にロードされたことを確認できます。

SQL MINUSの例

サンプルデータベースの次のemployeesテーブルとdependentsテーブルについて考えてみましょう。

employees_dependents_tables

各従業員には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)
SQL MINUS example

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 ORDER BY example

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

このチュートリアルは役に立ちましたか?