dポイントプレゼントキャンペーン実施中!

初歩的な質問で恐縮ですが、副問合せでたとえば

where empno not in (mgr1,mgr2,mgr3,...,null)

とあったとき

empno<>mgr1 and empno<>mgr2 and ... empno<>null

と同じ意味になるというのは分かるのですが、
なぜempno<>nullがあるとwhere以降が全てnullに
なってしまうのですか?
ごく普通に考えると「mgr1でもmgr2でもnullでもない」のだから、
empnoはmgr1やmgr2やnull以外の数値(なら何でもよい)
というようになると思うのですが…。
このあたりの論理式的な考え方に慣れていないために、
いまいち感覚がつかめません。
どう考えれば分かりやすく理解できるでしょうか?

A 回答 (2件)

NULLは、値が不明であることを意味します。


そして、SQLではTRUE、FALSEからなる2値論理ではなく、UNKNOWNの入った3値論理を使っています。
NULLを含む演算は、不明の値が入っていますので、結果もNULLになります。
また、NULLとの比較は、UNKNOWNになります。
今、T、F、Uであらわします。

empn <> null は、不明の値との比較ですので、結果はUです。
T AND U は、UはTまたはFになる事ができますので、Uになります。

T AND T → T
T AND F → F
T AND U → U
F AND F → F
F AND U → F
U AND U → U

値がNULLか調べるには IS NULL を使います。

empn <> null → empn IN NOT NULL
    • good
    • 0
この回答へのお礼

お礼が遅くなって申し訳ありませんでした。
3値論理について調べてみようと思います。
回答ありがとうございました。

お礼日時:2008/06/14 11:10

初めまして。



「NULL」というのはデータベースの世界で、特別なもので難しいものでわかりにくいものです。

 --- NULL=値ではない ---
というのが簡単な説明なのですが、つまり質問に書かれているとおり
「empno<>null」があると、where以降がすべてNULLになってしまいます。

値ではないですので、値(empno)と比較した際に「比較ができない」のです。
ですので、比較ができなく値を決めることができず、NULLになってしまいます。

データベースの世界では一番わかりにくい部分です。
    • good
    • 0
この回答へのお礼

お礼が遅くなって申し訳ありません。
nullがデータベースの中で特別なものという認識を
もつことができました。回答ありがとうございました。

お礼日時:2008/06/14 11:11

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す