気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/03/09 08:40
2016/03/09 08:49
回答4件
0
SQLはUNKNOWNをはじめとした「値でないもの」をすべてNULLとしています。
他にある「値でないもの」の代表的なものにはNot Applicableがありますが、そういうのも区別せずNULLです。
ユーザーの性別が未入力ならUNKNOWNですし、法人の性別はNot Applicableですよね、そういうのを区別せずという意味です。
結論としてはどういうことかというと、厳密な意味ではUNKNOWNとNULLは等価ではありません。NULLはUNKNOWNを含むと言うべきです。でも、実用的にはNULL===UNKNOWNだと明言しているRDB製品は複数あります。
投稿2016/03/09 08:38
総合スコア5570
0
ベストアンサー
等価ではありません。
UNKNOWNはtrueやfalseと同じく論理代数で、一方のNULLは単なる値とのことです。
3値論理とNULL(CodeZine)
投稿2016/03/09 08:59
総合スコア326
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/03/12 01:55
2016/03/14 06:32
2016/03/29 11:26
0
PostgreSQLでのみ使用できるらしいです。
因みに、自分の使用しているMySQL5.6では動作しませんでした。
質問者様からコメントをいただき再度調べてみました。
NULLとUNKNOWNは別もの(であるべき)という事の様です。
書き直すと下記のようです。(やはり私、独自の記述方式です。)
- NULL(KNOWN)
- UNKNOWN
しかし、実装しているRDBシステムによって実際の値は異なるようです。
MySQLではNULL <> UNKNOWNが仕様で記載されいるらしいですが、
別のあるRDBではNULL = UNKONWという仕様で設計されているようです。
どちらにしろ、下記のような処理はしてはいけないという事です。
sql
1SELECT 2 CASE [blnValue] 3 WHEN true THEN 'TRUE' 4 WHEN false THEN 'FALSE' 5 WHEN null THEN 'NULL' 6 ELSE 'UNKNOWN' 7 END 8FROM table_some
リンク先を参照しましたが
NULL (UNKNOWN)
と記述されている箇所は見つかりませんでした。
別のサイトを検索したところ、
SQLでのBoolean型に「3値問題」というのがあるらしいです。
Booleanがtrue
、false
、null
の3つを値として持つことがあり、
null
になったときに処理の結果が保障されないとのことです。
しかし、SQLではなく別のプログラミング言語ではNULLは2種類あることになっているようです。
便宜的に記載すると下記の様なことらしいです。(あくまで私、独自の記述方式です。)
- NULL(KNOWN)
- NULL(UNKNOWN)
なので、一般的なプログラミング言語においてのBoolean型は
このNULL2種類を含めて「Booleanの4種値問題」となるそうです。
SQLに話を戻すとNULLが2種の値を持つことがなく常にNULL(UNKNOWN)であることは保証されているため、
MySQLの仕様ドキュメントのどこかにその様な記載があったのかもしれません。
以上、
ご参考になりますでしょうか?
投稿2016/03/09 08:48
編集2016/03/12 10:43総合スコア396
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。