ホームページ >データベース >mysql チュートリアル >NULL 値は SQL の NOT IN 句の結果にどのような影響を与えますか?

NULL 値は SQL の NOT IN 句の結果にどのような影響を与えますか?

Patricia Arquette
Patricia Arquetteオリジナル
2025-01-23 12:51:13710ブラウズ

How Do NULL Values Affect the Results of SQL's NOT IN Clause?

SQL の NOT IN 句と NULL 値のニュアンス

SQL の NOT IN 句は、指定されたリスト内の値に一致する行を除外するために機能します。 ただし、このリスト内に NULL 値が存在するため、複雑さが生じます。

問題: NULL による予期しない結果

次の SQL クエリについて考えてみましょう:

<code class="language-sql">A: SELECT 'true' WHERE 3 IN (1, 2, 3, NULL);
B: SELECT 'true' WHERE 3 NOT IN (1, 2, NULL);</code>

クエリ A は結果を生成しますが、クエリ B は結果を生成しません。 これは、SQL が NULL 比較を処理する方法に起因します。 クエリ A は、3 がリスト内の いずれか の値と等しいかどうかを確認します。 3 は 3 に等しいため、結果が返されます。

逆に、

クエリ B は、3 が すべての 値と等しくないかどうかをチェックします。 ANSI_NULLS が有効になっている場合 (多くのシステムのデフォルト)、NULL を含む比較の結果は UNKNOWN になります。 UNKNOWN は true でも false でもありません。したがって、クエリ B は行を返しません。

ANSI_NULLS 設定とその影響

ANSI_NULLS を無効にすると、NULL の比較動作が変更されます。 ANSI_NULLS がオフの場合、NULL との比較では、値が等しくない場合は TRUE が返され、値が等しい場合は FALSE が返されます。 その結果、3 NOT IN (1, 2, NULL) が TRUE と評価されるため、クエリ B は ANSI_NULLS が無効になった結果を返します。

NULL の性質を理解する

NULL は未知の値を意味することを覚えておくことが重要です。 NULL を任意の値と比較すると、等しいか不平等であるかを明確に判断できないため、常に UNKNOWN が得られます。 NOT IN 値を使用して NULL を使用する場合は、潜在的な問題を予測し、明示的な NULL チェックや COALESCE を使用して NULL を既知の値に置き換えるなどの適切な手法を実装して、堅牢なクエリ処理を行う必要があります。 .

以上がNULL 値は SQL の NOT IN 句の結果にどのような影響を与えますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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