MySQL での NULL 値の比較
MySQL では、NULL 値を含むカラムの比較は、その動作が標準的な等価比較とは異なるため、課題が生じる可能性があります。この記事では、「SELECT * from TABLE where CODE!='C'」のようなクエリが、「C」が NULL でない場合でも CODE=NULL の行を除外する理由を説明します。
NULL 比較動作
列を NULL 以外の値 (「CODE!='C'」など) と比較する場合、クエリは CODE が 'C' と一致する行を返し、NULL を含む他のすべての値を除外します。この動作は、SQL が NULL を標準の比較に参加しない一意の値として扱うために発生します。
比較に NULL 値を含めるには、IS NULL または IS NOT NULL 演算子を使用して明示的にチェックする必要があります。たとえば、次のクエリは、CODE が NULL であるか、「C」に等しくないすべての行を返します:
<code class="language-sql">SELECT * from TABLE where CODE IS NULL OR CODE!='C'</code>
CODE!='C' の動作の説明
「CODE!='C'」が CODE=NULL の行を返さない理由は、クエリが NULL を含む比較に対して false と評価されるためです。 「C」が NULL でない場合でも、NULL 値と比較すると常に false になります。
代替比較演算子
MySQL は、NULL を含む値を比較するために使用できる代替比較演算子「<=」 (以下) を提供します。 「x
「CODE!='C'」の代わりに「CODE <= 'C' OR CODE IS NULL」を使用すると、CODE が NULL であるか、'C' に等しくないすべての行を返すことができます。
以上が「CODE!='C'」が MySQL クエリで NULL 値を除外するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。