LoginSignup
0
0

More than 3 years have passed since last update.

【SQL入門】NOT IN や <> ALL での NULL の挙動

Posted at

NOT IN と <> ALL 演算子

右辺に列挙された値のどれとも一致しない場合に真となる。

SELECT * FROM movie WHERE genre NOT IN ('アクション', 'ホラー', 'アニメ');
SELECT * FROM movie WHERE genre <> ALL ('アクション', 'ホラー', 'アニメ');
-- genre が「アクション」でも「ホラー」でも「アニメ」でもない行を抽出

NOT IN の右辺に1つでもNULLが含まれる場合

SELECT * FROM movie WHERE genre NOT IN ('アクション', 'ホラー', NULL);
  • 右辺に列挙された値を不等号を使って1つずつ比較し、全ての値と等しくないことを判定する。
SELECT * FROM movie WHERE (genre <> 'アクション') AND (genre <> 'ホラー') AND (genre <> NULL);
  • =<> などの通常の比較演算子は、もともと値と値を比較するためのもの。 よって、「値ではないNULL」を比較すると、不明な結果である UNKNOWN になる。
SELECT * FROM movie WHERE (genre <> 'アクション') AND (genre <> 'ホラー') AND UNKNOWN;
  • (条件式) AND UNKNOWN の結果は UNKNOWN または FALSE になる。
SELECT * FROM movie WHERE UNKNOWN(または FALSE);
  • WHERE句による絞り込みは、条件式が TRUE となる行だけが選ばれる。条件式が FALSE や UNKNOWN となる行は処理対象にならない。

よって、NOT IN の右辺に1つでもNULLが含まれると、処理結果は1行も得られない。
<> ALL も同様の挙動となる。

参考図書:スッキリわかるSQL入門 第2版

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0