ray88’s diary

お仕事で困ったとき用の自分用の覚書

SQL指南書 3値倫理① NULLの扱い

SQL 指南書集 目次 - ray88’s diary
■3値倫理とは
普通の言語の真理値型がtrue,falseという2つの値を持つのに対し、SQLはそれに加えてunknownという第3の値を持つ

SQLで3値倫理が採用されている理由→NULLがあるから

■NULLは2種類に分けて考えられる
 未知(Unknown):今はわからないが、条件が揃えばいずれわかる
 (例)サングラスをかけている人の目の色(サングラスをはずせば目の色がわかる)
 ②適用不要(Not Appplicable):どうがんばってもわからない
 (例)男性の出産回数(このようにありえないこと)

■「=NULL」ではなく「IS NULL 」と書かなくてはならない理由
NULLは値でも変数でもなく、ただの「そこに値がない」という目印のため、
 比較述語(=、>、<、<>など)は使用できない。

--以下の式はすべて unknown に評価される
1 = NULL
2 > NULL
3 < NULL
4 <> NULL
NULL = NULL

以下失敗例のSQL。クエリ結果で選択されるのはWHERE句の条件がtrueになる場合のみ。
falseやunknownの行は選択されない。

---NULLの検出に失敗するSQL
SELECT * 
     FROM tbl_A
     WHERE col_1 = NULL;