- ベストアンサー
副問合せで質問です
初歩的な質問で恐縮ですが、副問合せでたとえば 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以外の数値(なら何でもよい) というようになると思うのですが…。 このあたりの論理式的な考え方に慣れていないために、 いまいち感覚がつかめません。 どう考えれば分かりやすく理解できるでしょうか?
- みんなの回答 (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
その他の回答 (1)
- tenten72
- ベストアンサー率29% (8/27)
初めまして。 「NULL」というのはデータベースの世界で、特別なもので難しいものでわかりにくいものです。 --- NULL=値ではない --- というのが簡単な説明なのですが、つまり質問に書かれているとおり 「empno<>null」があると、where以降がすべてNULLになってしまいます。 値ではないですので、値(empno)と比較した際に「比較ができない」のです。 ですので、比較ができなく値を決めることができず、NULLになってしまいます。 データベースの世界では一番わかりにくい部分です。
お礼
お礼が遅くなって申し訳ありません。 nullがデータベースの中で特別なものという認識を もつことができました。回答ありがとうございました。
お礼
お礼が遅くなって申し訳ありませんでした。 3値論理について調べてみようと思います。 回答ありがとうございました。