Previous: リスト
Up: where句
Next: 文字列の比較 likeとワイルドカード
Previous Page: リスト
真偽のいずれかの値を返す条件判断や、それらの間の論理演算は、多くのプログラム
言語においてもなじみのものであるが、データベースでは、論理演算と関連して特殊な
値が定義されているのが大きな特徴である。それがnull値である。null値は、テーブル
中にカラムの値として現れることができる。値がnullだということは、その値がいまだ
我々に知られていないこと(未知)、あるいは、その値が未だに定まっていないこと
(未定)、あるいは、どうなっているのか分からない(不明)ことを表していると解釈
される。
今、テーブル「書籍台帳」中のある本の定価がnullであったとしよう。すなわち、あ
る本の定価がその時点で不明だったとしよう。それでは、この本は次の二種類の検索の
どちらで検索されるであろうか?
select 書名 , 定価 from 書籍台帳 where 定価 < 1000select 書名 , 定価 from 書籍台帳 where 定価 >= 1000
一見するとすべての本は、どちらかの検索で見つかるように思えるかも知れない。しか
し、定価のカラムがnull値をとっているということは、定価が分からないということで
あり、当然、「この本の定価は千円未満である」という命題と「この本の定価は千円以
上である」という命題のどちらが正しいか分からないということを意味している。だか
ら、定価がnull値の本は、上の二つの検索のいずれでも見つけだすことは出来ないことになる。
こうした解釈は、null値というのが、単にカラムのとる値であるだけでなく、真あるい
は偽とは区別された、「不明・未定・未知」といった状態を表す第三の真理値として
も、解釈されるべきことを示唆している。
null値の導入は、データベースの実際の運用上では非常に大きなメリットを持っている が、なかなか面倒な問題も引き起こす。次のような検索を考えてみよう。
select 書名 , 定価 from 書籍台帳 where 定価 = null
気持ちとしては、この検索は、定価がnull値をとっている本を探しているのであるが、
残念ながらこの検索は成功しない。確かに、null = null であるならば、この検索は
成功するのだが、ここで比較されているのは定価の値である。未知な定価と未知な定価
とは、一般には等しくはない。そうした意味では、カラムの値としてのnull値は、自分
自身とさえ一致しないのである。
それでは、null値をとる項目をどうしたら選び出すことが出来るのであろうか? SQLでは、その為に、次のような構文が特別に用意されているのである。
select 書名 , 定価 from 書籍台帳 where 定価 is null
次の例は、いうまでもなく、例22の逆、すなわち、null値をとらない項目の検索であ る。ここでも、'is not null' を、' != null ' で置き換えることは出来ないことに 注意しよう。
select 書名 , 定価 from 書籍台帳 where 定価 is not null
maruyama@wakhok.ac.jp