ホームページ >データベース >mysql チュートリアル >NULL 値は SQL の NOT IN 句の結果にどのような影響を与えますか?
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 サイトの他の関連記事を参照してください。