OracleのSQLではNOT EXISTSという便利な命令が使用できます。NOT EXISTS句の副問合せ条件に一致しなければ結果を返却してくれます。
また、NOT EXISTS句を使わなくてもLEFT JOINで代用できますので、LEFT JOINでNOT EXISTSを実現する方法も紹介します。
前提条件
TB_MAINのレコード
SELECT ID,NAME FROM TB_MAIN; ID NAME ------- 1 キリン 2 猿 3 たぬき
TB_SUBのレコード
SELECT ID FROM TB_SUB; ID -- 2
NOT EXISTSのサンプルSQL(TB_MAINからTB_SUBのID以外のレコードを抽出)
SELECT
X.ID
,X.NAME
FROM
TB_MAIN X
WHERE
NOT EXISTS (
SELECT
*
FROM
TB_SUB Y
WHERE
X.ID = Y.ID
)
;
ID NAME
-------
1 キリン
3 たぬき
LEFT JOINのサンプルSQL(TB_MAINからTB_SUBのID以外のレコードを抽出)
SELECT
X.ID
, X.NAME
FROM
TB_MAIN X
LEFT JOIN TB_SUB Y ON X.ID = Y.ID
WHERE
Y.ID IS NULL
;
ID NAME
-------
1 キリン
3 たぬき
LEFT JOINは複数テーブルとJOINしているついでにNOT EXISTSの様な条件を、簡単に付ける事ができるので使いどころはあるかと思います。
以上です。