- - PR -
SQLの IS NULL , IS NOT NULLの歴史的経緯?
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-05-09 14:05
unibon氏のいうように、SQLの仕様で三値論理(True/False/Unknown)だからです。二値論理(True/False)になれた身からは直感的にわかりづらいですけど。
SQLのNULLは「不明(unknown)」「非適用(not applicable)」の意味で使われます。 unknownの論理演算結果: not unk → unk true and unk → unk false and unk → false unk and unk → unk true or unk → true false or unk → unk unk or unk → unk この結果はプログラマがやりたい処理と違う事が多いので、true か false しか返さない is [not] null を使わないといけないわけです。 ピアソンの「プログラマのためのSQL」なんかを読むと、NULLだけで一章割いてこの辺を説明しているので、ご覧になってみてはいかがでしょうか。NULLに限らずマニアックで面白い本です。 # Java で null == null が true を返すのは、JLS でそう決まっているから。どう実装しているかはJVMベンダ次第でしょうけど | ||||||||
|
投稿日時: 2004-05-10 09:11
はにまるです。
話をずらしますが、「三値論理」って言葉はDB用語ですか? 始めて聞く言葉なので、どこで仕入れた用語かな?と気になりました。 skulkerさんは、ピアソンの「プログラマのためのSQL」という本から 仕入れた様ですが、気になるので教えて下さい。 | ||||||||
|
投稿日時: 2004-05-10 09:21
>話をずらしますが、「三値論理」って言葉はDB用語ですか?
三値論理はもともとは数学用語 プール代数の用語だと思います。 | ||||||||
|
投稿日時: 2004-05-10 09:28
こんにちわ。以前↓で読みましたが論理学の用語みたいですね。 http://www.geocities.jp/mickindex/database/db_3vl.html 「不明(unknown)」「非適用(not applicable)」を分けて4値論理の関係モデルも 提唱されていたんですね〜。上のページにNULLの歴史的背景なんかも書かれてますよ。 | ||||||||
|
投稿日時: 2004-05-10 09:45
七味唐辛子さん、ゆうさん、ご返答ありがとうございます。
雑談している気持ちだったので、自分でWEB検索する事を忘れていました。 御恥ずかしい限りです。 ![]() しかし凄いですね、皆さん幅広い知識を持たれていますね。 ずれた所で感動。 | ||||||||
|
投稿日時: 2004-05-10 10:13
そういうつもりではなかったのですが ![]() というか、この為に検索したわけではありませんし ![]() 以前、まったく別のチューニングのことで検索したのがそのページだっただけのことです。 面白かったのでブックマークを取っていたのでした。 それにしてもNULLって扱いづらいですよね。 私としてはできるだけNULLが登場しないようにDBを作ろうとしていますが…。 | ||||||||
|
投稿日時: 2004-05-10 10:53
皆様ありがとうございます。
皆様の話を総合すると、 SQL云々は別にして、NULLは値ではないので、 文法および論理的に = NULL あるいは <> NULL は成り立たない。 (左辺と右辺の比較が成り立たない、意味がないから) というのが正解ですかね。。 つまり、正しい論理に則って規格を構築すると、やっぱりこうなるって ことなんですね。 追伸: よねださんはひょっとして PASS-Jでリーダー格の(?)よねださんでしょうか。 その節は、MSDEのインストールでお世話になりました。 | ||||||||
|
投稿日時: 2004-05-16 23:23
米田です。
>よねださんはひょっとして PASS-Jでリーダー格の(?)よねださんでしょうか。 はい、システム管理分科会 ボードリーダーの米田です。 >その節は、MSDEのインストールでお世話になりました。 >今年からプログラムに取り組んだ新人君にSQLを >教えている過程で、改めてあれっと思いました。 順調なようでなによりです。 |