2016-09-17 3 views
0

私はSQLでNULLの意味を完全に理解していないと思います。私はこのSQLを実行し、出力として1を見ることを期待しましたが、私はそれを見ませんでした:"select 1 where NULL <> -1;"の出力

select 1 where NULL <> -1; 

NULLと-1は異なりますか?誰でも "NULL <> -1"のこの句が偽である理由を説明できますか?

+2

基本的に、 'IS NULL'以外のすべての比較は、" false "または" NULL "を返します。つまり、それらは真実ではなく、行は除外されます。 –

+1

NULL値ではないため、比較できません。 – Joe

+1

と '何かが何かNULLではない 'と言う理由 –

答えて

0

NULL値ではないため、他の値と比較したり、null以外の結果を得ることはできません。 Docs。ヌルを比較するとhow

+0

OPがどのRDBMSを使用しているのか分かりませんが、オラクルだとは思いません。 OracleはOPの構文IIRCを受け入れるべきではありません。それには 'from'が必要です。 – hvd

+0

@hvd:式でNULL値を扱う方法についての説明は、すべてのSQLダイアレクトで有効です。 –

+0

@a_horse_with_no_name一般的にはいですが、リンクされたドキュメントには、Oracle固有の詳細も含まれています。いくつかの非標準機能の言及。それはOPには役に立たないでしょう。 – hvd

0

NULLは不明です。したがって、where NULL <> -1では、未知の値が-1に等しいかどうかを知りたいと思っています。 DBMSは(もちろん)知らないので、式の結果はTRUEでもFALSEでもありません。それはNULLです。

WHERE句の結果となる行のみが選択されます(TRUE)。式がTRUEではなく、NULLになるため、選択された行はありません。

+0

実際、NULLとの比較の結果はUNKNOWNであり、NULLではありません。 – dnoeth

+0

@dnoeth:いいえ、NULL *は* unknown *のデータベース名です。 'select 1 where(null = -1)is null'を試してください。 (PostgreSQLのテストはhttp://sqlfiddle.com/#!15/9eecb7db59d16c80417c72d1e1f4fbf1/11585です。) –

+0

カラムは 'NULL'でも構いませんが、決して比較の結果ではありません。そのため、' IS UNKNOWN'が標準SQL(とPostgreSQLも)。 https://books.google.de/books?id=efe2wB_DfxYC&pg=PA219&lpg=PA219&dq=%22Truth+table+for+the+AND+boolean+operator%22&source=bl&ots=DfT9W4xLGF&sig=Yee-tSw5oQjTfoazWtRYEzuXBMM&hl=de&saのページをご覧ください。 = X&ved = 0ahUKEwjQ6ICmrpfPAhWBpiwKHVNQBo0Q6AEIJTAB #v = 1ページとq =%22Truth%20table%20for%20the%20and%20boolean%20operator%22&f = false – dnoeth

関連する問題