SQL_3値論理と注意点

3値論理

3値論理とは


「3値論理 (英: ternary, three-valued or trivalent logic) とは、通常の真 (true) と偽 (false) から成る真偽値の他に、第3の真理値を持つ論理体系」(wiki)

ja.wikipedia.org

この定義はよく分かりませんね汗・・

SQLでは、真、偽の他に不明(UNKNOWN)という第3の真理値(NULL)がある、と認識しておけば良いです。

注意点


NOT IN , NOTはNULLが漏れる

whereでNOT INなど条件指定する場合、NULLの列が対象から漏れてしまいます。

対策

NULLや空欄の列を集計対象に含めたい場合は、以下のように条件を追加します。

WHERE
 列 NOT IN ('hoge')
 OR
 列 IS NULL
 OR
 列 IN('')

サブクエリはNOT IN ではなく NOT EXISTSを使う


NOT INのサブクエリで使用されるテーブルの列にNULLがある場合、SQLの結果が空になってしまいます。 これは非常に厄介です。

NOT EXISTSであれば、true か falseで結果が返されますので、上記の問題に対応できます。

SELECT *
FROM テーブル1
WHERE 
 NOT EXISTS
 (
  SELECT *
  FROM テーブル2
  WHERE 条件
 )

3値論理を理解していると、こういった手順の理解もスムーズになりますね。

以上です。