質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Q&A

解決済

4回答

2737閲覧

NULL と UNKNOWN は等価?

re97

総合スコア208

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

1グッド

0クリップ

投稿2016/03/09 08:22

編集2016/03/09 08:47

NULL と UNKNOWN は等価ですか?

SQL では、すべての論理演算子は TRUE、FALSE、または NULL (UNKNOWN) に評価されます

リンク内容

dsk👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dupont_kedama

2016/03/09 08:36 編集

リンク先に「SQL では、すべての論理演算子は TRUE、FALSE、または NULL (UNKNOWN) に評価されます」とは書いてないです。 なぜその質問に至ったのかがわかりません。困りごとはなんですか?
re97

2016/03/09 08:49

リンク先修正しました
guest

回答4

0

概念的なことが知りたいのであればミックさんの記事が詳しく易しいので参考になると思います。
3値論理とNULL

投稿2016/03/09 08:55

dupont_kedama

総合スコア925

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

SQLはUNKNOWNをはじめとした「値でないもの」をすべてNULLとしています。
他にある「値でないもの」の代表的なものにはNot Applicableがありますが、そういうのも区別せずNULLです。
ユーザーの性別が未入力ならUNKNOWNですし、法人の性別はNot Applicableですよね、そういうのを区別せずという意味です。

結論としてはどういうことかというと、厳密な意味ではUNKNOWNとNULLは等価ではありません。NULLはUNKNOWNを含むと言うべきです。でも、実用的にはNULL===UNKNOWNだと明言しているRDB製品は複数あります。

投稿2016/03/09 08:38

yuba

総合スコア5570

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

re97

2016/03/09 08:55

厳密な意味ではUNKNOWNとNULLは等価ではないが、実用的には、TRUE、FALSE、または NULL (===UNKNOWN) の3つ、と考えて処理すれば良い、ということでしょうか? ちなみに、「3値論理」の分別は、TRUE、FALSE、NULL? それとも、TRUE、FALSE、UNKNOWN?
guest

0

ベストアンサー

等価ではありません。
UNKNOWNはtrueやfalseと同じく論理代数で、一方のNULLは単なる値とのことです。
3値論理とNULL(CodeZine)

投稿2016/03/09 08:59

issei.

総合スコア326

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

re97

2016/03/12 01:55

回答ありがとうございます。 下記認識で合っているでしょうか? ・3値論理の3値とは、UNKNOWN/true/false ・しかし、実際にUNKNOWNはコードに記述できない仕様
issei.

2016/03/14 06:32

認識としては問題ないと思います。 念のため補足しますと、UNKNOWNはtrueやfalseと同じく、式を評価した結果として現れるので、コードに書く必要は無いようです。書いてもエラーにはならないでしょうが、そもそも書くような具体的なケースが思いつきませんでしたすみません。
re97

2016/03/29 11:26

コメントありがとうございました
guest

0

PostgreSQLでのみ使用できるらしいです。
因みに、自分の使用しているMySQL5.6では動作しませんでした。
MySQLスクリーンキャプチャ


質問者様からコメントをいただき再度調べてみました。
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がtruefalsenullの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
Aeona

総合スコア396

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

re97

2016/03/09 08:50

NULL(UNKNOWN)の意味ですが、NULLはUNKNOWNと等価ということでしょうか? それとも、NULLの結果がUNKNOWN?
re97

2016/03/12 01:58

再度調査いただきありがとうございます ということは、MySQLコードにUNKNOWNというキーワードを使用できないということでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問