通常のプログラミング言語の論理値:True,False
SQLの論理値 :True,False,Unknown
●SQLは第三の値Unknownを持つ
●NULLについては、2種類ある
①未知(Unknown)
⇒値でも変数でもない。そこに値がないことを示すための
視覚的マーク、目印にすぎない。
②適用不能(Not Applicable)
⇒「N/A」
不明(サングラスをかけた人の目の色)ではなく、
無意味(冷蔵庫の目の色⇒冷蔵庫に目の色という属性は適用不能)
●SQLにはNULLは1種類しか存在しない⇒①Unknown
●なぜ、「=NULL」ではなく、「IS NULL」と書かなければならないか?
⇒NULLに比較述語(=,>,<)を用いると、結果がUnknownになるから。
※比較述語が適用できるのは値のみであり、NULLは値でも変数でもない。
クエリの結果として選択されるのは、WHERE句の条件評価がtrueになる行のみで、false、unknownの行は選択されない。
<Unknownに評価される式>
・1 = NULL
・2 > NULL
・3 < NULL
・4 <> NULL
・NULL = NULL
・NULL > NULL
・NULL < NULL
・NULL <> NULL
「IS NULL」⇒「IS」が述語で、「NULL」が値とみられがちだが、「IS NULL」で1つの述語とみなすべき。
※SQLには、「IS TRUE」,「IS FALSE」があるが、これとは別の構造を持つ述語として考える。
AND | True | Unknown | False |
True | T | U | F |
Unknown | U | U | U |
False | F | U | F |
ANDの場合の優先順位 : False > Unknown > True
OR | True | Unknown | False |
True | T | U | T |
Unknown | U | U | U |
False | T | U | F |
ORの場合の優先順位 : True > Unknown > False