ホームページ >データベース >mysql チュートリアル >SQL で NULL と比較すると != が失敗するのはなぜですか?

SQL で NULL と比較すると != が失敗するのはなぜですか?

Linda Hamilton
Linda Hamiltonオリジナル
2025-01-21 14:51:08194ブラウズ

Why Does != Fail When Comparing to NULL in SQL?

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 または != を使用して値を = と比較すると、UNKNOWNTRUE ではなく、常に 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 NULLIS NULL を使用する必要があります。 予期しない結果を防ぐため、!= 比較に = または NULL を使用しないでください。 SQL ステートメントで NULL を確実に処理するには、これらの専用述語を使用します。

以上がSQL で NULL と比較すると != が失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。