NULL 値との MySQL の比較
例の CODE カラムなど、NULL 値を許可するカラムを扱う場合、MySQL がこれらの比較をどのように処理するかを理解することが重要です。 次のクエリで CODE が NULL の行が除外されるのはなぜですか?
<code class="language-sql">SELECT * from TABLE where CODE!='C'</code>
これは、!=
(等しくない) 演算子が NULL 値を明示的にテストしないためです。値が「C」と等しくないかどうかだけがチェックされます。 NULL は欠損値を示す特別な値であるため、特定の値と同等でも不等価でもありません。
NULL 値を含めるには、IS NULL
または IS NOT NULL
演算子を使用する必要があります。これらの演算子は、NULL 値の存在を明示的にチェックします。正しいクエリは次のようになります:
<code class="language-sql">SELECT * from TABLE where CODE IS NULL OR CODE!='C'</code>
IS NULL
または IS NOT NULL
を使用すると、クエリには CODE が NULL である行と、CODE が 'C' に等しくない行が含まれることが保証されます。これは、OR
演算子が両方の条件を行を一致させるための有効な基準として扱うためです。
要約すると、NULL 値を含む可能性のある列を比較する場合は、常に IS NULL
または IS NOT NULL
演算子を使用して、NULL 値の存在を明示的にテストします。そうしないと、比較結果が期待どおりにならない可能性があります。
以上がMySQL が WHERE 句で != 演算子を使用するときに NULL 値を除外するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。