SQL_3値論理と注意点
3値論理
3値論理とは
「3値論理 (英: ternary, three-valued or trivalent logic) とは、通常の真 (true) と偽 (false) から成る真偽値の他に、第3の真理値を持つ論理体系」(wiki)
この定義はよく分かりませんね汗・・
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値論理を理解していると、こういった手順の理解もスムーズになりますね。
以上です。