Closed1

3値論理について

くぶたくくぶたく

■3値論理とNULL
SQLの論理体型はtrue,false,unknownの3値論理(three-valued logic)に区別される。

■ 2つのNULL、3値理論か、4値理論か?
2つのNULLとはどういうことか?

→ 未知(unknown)と適用不能(not applicable)がある。

未知
→ サングラスをかけた人の目の色

適用不能
→ 冷蔵庫の目の色

適用不能のNULLは「不明」というよりも「無意味」「論理的に不可能」という概念に近い。
しかし、この4値理論の考え方はあまり支持を得ず、DBMSではNULLをひとまとめにして3値理論が採用されている。

■なぜ「 = NULL」ではなく「is NULL」と書かなくてはならないのか?
これは疑問に思ってる人が多いはず!
SQL学びたての頃にこんなクエリを書いた人がいるはず。

-- NULLの検出に失敗するSQL
select *
from tbl_A
where col_1 = NULL;

NULLを「=」で絞り込もうとしているが、正しくは「col_1 is NULL」と書かなければならない。
同一性は「=」で表すというのが、小学生から習ってきた常識なのになぜ...?
これには理由がある。NULLに比較述語を適用した結果が、常にunknownとなってしまうからである。
col_1が値である場合もNULLである場合も、結果は全てunknownとなる。

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

なぜNULLに比較述語を適用した結果は絶対に真にならない?
→ そもそも、NULLが値でも変数でもない。もし値であるならば型は何になる?

■3値論理の真理表

altテキスト

unknown(null)はtrueでもfalseでもどちらにもなる可能性がある。そのため表からも読み取れるように以下の考え方が成り立つ。

[and]
null and true ⇒ null
true and true → true
false and true → false

null and false ⇒ false
true and false → false
false and false → false

[or]
null or true ⇒ true
true or true → true
false or true → true

null or false ⇒ null
true or false → true
false or false → false

3値論理をマスターすればSQLを扱うものとして一皮むけた人物になれるとのこと。

このスクラップは2023/10/02にクローズされました