ホームページ >データベース >mysql チュートリアル >SQL で NULL と比較すると != が失敗するのはなぜですか?
SQL の != 演算子と NULL の難問
SQL の !=
(等しくない) 演算子は、NULL
値を扱うときに独特の課題を引き起こします。 NULL 以外の値を効果的に比較しますが、NULL
での動作は直感に反します。
!= NULL
次の点を考慮してください:
<code class="language-sql">SELECT * FROM MyTable WHERE MyColumn != NULL; -- Returns 0 rows SELECT * FROM MyTable WHERE MyColumn NULL; -- Also returns 0 rows</code>
これらのクエリは、MyColumn
が NULL
ではない行を検索することを目的としており、驚くべきことに空の結果セットを返します。これはバグではありません。それはNULL
の性質によるものです。 NULL
は値を表しません。それは値の不在を表します。 したがって、NULL
または !=
を使用して値を =
と比較すると、UNKNOWN
や TRUE
ではなく、常に FALSE
が得られます。
解決策: IS NOT NULL
NULL 以外の値を正確に識別するには、IS NOT NULL
述語を使用します。
<code class="language-sql">SELECT * FROM MyTable WHERE MyColumn IS NOT NULL; -- Returns the expected rows</code>
IS NOT NULL
(およびその対応物である IS NULL
) は、SQL 比較で NULL
値を処理するために特別に設計されています。
非 NULL 値との比較
!=
演算子は、NULL 以外の値と比較する場合に期待どおりに機能します。
<code class="language-sql">SELECT * FROM MyTable WHERE MyColumn != 'ValueX'; -- Returns rows where MyColumn is not 'ValueX'</code>
重要なポイント
NULL
値を含む正確な SQL クエリには、IS NOT NULL
と IS NULL
を使用する必要があります。 予期しない結果を防ぐため、!=
比較に =
または NULL
を使用しないでください。 SQL ステートメントで NULL
を確実に処理するには、これらの専用述語を使用します。
以上がSQL で NULL と比較すると != が失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。