• ベストアンサー

副問合せで質問です

初歩的な質問で恐縮ですが、副問合せでたとえば 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以外の数値(なら何でもよい) というようになると思うのですが…。 このあたりの論理式的な考え方に慣れていないために、 いまいち感覚がつかめません。 どう考えれば分かりやすく理解できるでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • masa6272
  • ベストアンサー率66% (93/140)
回答No.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

noname#67342
質問者

お礼

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

その他の回答 (1)

  • tenten72
  • ベストアンサー率29% (8/27)
回答No.1

初めまして。 「NULL」というのはデータベースの世界で、特別なもので難しいものでわかりにくいものです。  --- NULL=値ではない --- というのが簡単な説明なのですが、つまり質問に書かれているとおり 「empno<>null」があると、where以降がすべてNULLになってしまいます。 値ではないですので、値(empno)と比較した際に「比較ができない」のです。 ですので、比較ができなく値を決めることができず、NULLになってしまいます。 データベースの世界では一番わかりにくい部分です。

noname#67342
質問者

お礼

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

関連するQ&A