SQL

NOT EXISTSを使わない

  • このエントリーをはてなブックマークに追加

OracleのSQLではNOT EXISTSという便利な命令が使用できます。NOT EXISTS句の副問合せ条件に一致しなければ結果を返却してくれます。

また、NOT EXISTS句を使わなくてもLEFT JOINで代用できますので、LEFT JOINNOT 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の様な条件を、簡単に付ける事ができるので使いどころはあるかと思います。

以上です。

  • このエントリーをはてなブックマークに追加

コメントを残す

*