リテラルとNULLを比較するには、特別な構文IS NULL
を使用する必要があることに最近気付きました。
ここで= NULL
が機能しないのはなぜですか?
NULLに関するPSOUGのメモ を見てください。 Fabricio Araujoがほのめかしたように、NULLは実際には4や文字列「ベーコンストリップ」のような値ではありません。実際、SQL言語ではNULLは ntyped であるため、等価比較でNULLを有効に使用できません。特別なIS [NOT] NULL
構文を使用して、値がNULLかどうかを確認します。
SQL Serverには、=NULL
がIS NULL
と同じように動作するように接続設定があります。しかし、最新バージョンではもう推奨されていません-非推奨としてマークされています。
推奨されるのは、SQL標準の方法であるIS [NOT] NULL
演算子です。
(そして、ここでは「NULLが値またはステータスであるかどうかにかかわらず、戦争を開始しません)...... hehehe
_is null
_構文を正当化するのではなく、null
sとそれらを処理するために使用される構文を扱う際の一般的な経験則がないことを指摘する方が良いと思います。例えば:
set val = null
_構文をよりよく反映する_set val to null
_などの構文ではなく、_is null
_のような構文を使用します。null
を処理する場合、ほとんどの場合間違いです。「nullはここではのように動作するため、ここではそのように動作する必要がありますここ は、postgresの観点からこの主題についての優れたエッセイです。簡単にまとめると、nullはコンテキストに応じて異なる方法で処理され、nullについての仮定を間違えないようにしています。
OracleはNULLを不明な値として扱います。この平等が機能するかどうか自問してください。
(unknown amount in George's wallet) = (unknown amount in Harry's wallet)
または別の方法で述べた
NULL = NULL
答えは明らかに多分、それは真実でも偽でもありません。
編集:コメントに応えて、私はそれが使用されているのを見たので、NULLに少し明確化を追加します。
NULLは実際には「設定されていない」ことを意味しますが、この質問の文脈では、上記の記述は正しいと思います。
列がNULL値を持つ理由はいくつかあります。
一部のコンテキストでは、NULLは、次のように正しくないと考えられる方法で処理される場合があります。