- PR -

SQLの IS NULL , IS NOT NULLの歴史的経緯?

投稿者投稿内容
skulker
常連さん
会議室デビュー日: 2003/11/13
投稿数: 41
投稿日時: 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ベンダ次第でしょうけど
はにまる
ぬし
会議室デビュー日: 2003/12/19
投稿数: 969
お住まい・勤務地: 誤字脱字の国
投稿日時: 2004-05-10 09:11
はにまるです。

引用:

unibonさんの書き込み (2004-05-08 00:05) より:
いわゆる「3値論理」だからです。



引用:

skulkerさんの書き込み (2004-05-09 14:05) より:
三値論理(True/False/Unknown)だからです。



話をずらしますが、「三値論理」って言葉はDB用語ですか?
始めて聞く言葉なので、どこで仕入れた用語かな?と気になりました。

skulkerさんは、ピアソンの「プログラマのためのSQL」という本から
仕入れた様ですが、気になるので教えて下さい。
七味唐辛子
ぬし
会議室デビュー日: 2001/12/25
投稿数: 660
投稿日時: 2004-05-10 09:21
>話をずらしますが、「三値論理」って言葉はDB用語ですか?
三値論理はもともとは数学用語 プール代数の用語だと思います。
ゆう
ベテラン
会議室デビュー日: 2003/06/20
投稿数: 56
投稿日時: 2004-05-10 09:28
引用:

はにまるさんの書き込み (2004-05-10 09:11) より:
はにまるです。

話をずらしますが、「三値論理」って言葉はDB用語ですか?
始めて聞く言葉なので、どこで仕入れた用語かな?と気になりました。

skulkerさんは、ピアソンの「プログラマのためのSQL」という本から
仕入れた様ですが、気になるので教えて下さい。




こんにちわ。以前↓で読みましたが論理学の用語みたいですね。

http://www.geocities.jp/mickindex/database/db_3vl.html

「不明(unknown)」「非適用(not applicable)」を分けて4値論理の関係モデルも
提唱されていたんですね〜。上のページにNULLの歴史的背景なんかも書かれてますよ。
はにまる
ぬし
会議室デビュー日: 2003/12/19
投稿数: 969
お住まい・勤務地: 誤字脱字の国
投稿日時: 2004-05-10 09:45
七味唐辛子さん、ゆうさん、ご返答ありがとうございます。

雑談している気持ちだったので、自分でWEB検索する事を忘れていました。
御恥ずかしい限りです。

しかし凄いですね、皆さん幅広い知識を持たれていますね。
ずれた所で感動。


ゆう
ベテラン
会議室デビュー日: 2003/06/20
投稿数: 56
投稿日時: 2004-05-10 10:13
引用:

はにまるさんの書き込み (2004-05-10 09:45) より:
七味唐辛子さん、ゆうさん、ご返答ありがとうございます。

雑談している気持ちだったので、自分でWEB検索する事を忘れていました。
御恥ずかしい限りです。

しかし凄いですね、皆さん幅広い知識を持たれていますね。
ずれた所で感動。




そういうつもりではなかったのですが
というか、この為に検索したわけではありませんし

以前、まったく別のチューニングのことで検索したのがそのページだっただけのことです。
面白かったのでブックマークを取っていたのでした。

それにしてもNULLって扱いづらいですよね。
私としてはできるだけNULLが登場しないようにDBを作ろうとしていますが…。
platini
大ベテラン
会議室デビュー日: 2002/12/03
投稿数: 193
投稿日時: 2004-05-10 10:53
皆様ありがとうございます。
皆様の話を総合すると、
SQL云々は別にして、NULLは値ではないので、
文法および論理的に = NULL あるいは <> NULL は成り立たない。
(左辺と右辺の比較が成り立たない、意味がないから)
というのが正解ですかね。。

つまり、正しい論理に則って規格を構築すると、やっぱりこうなるって
ことなんですね。

追伸:
よねださんはひょっとして PASS-Jでリーダー格の(?)よねださんでしょうか。
その節は、MSDEのインストールでお世話になりました。
よねだ
常連さん
会議室デビュー日: 2002/10/13
投稿数: 22
投稿日時: 2004-05-16 23:23
 米田です。

>よねださんはひょっとして PASS-Jでリーダー格の(?)よねださんでしょうか。
 はい、システム管理分科会 ボードリーダーの米田です。

>その節は、MSDEのインストールでお世話になりました。

>今年からプログラムに取り組んだ新人君にSQLを
>教えている過程で、改めてあれっと思いました。
 順調なようでなによりです。

スキルアップ/キャリアアップ(JOB@IT)