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

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

DDD
DDDオリジナル
2025-01-23 12:47:10477ブラウズ

How Do NULL Values Affect the Outcome of a NOT IN Clause?

NULL と NOT IN 句を理解する

NOT IN 句を使用する場合、LEFT JOIN 句を使用する場合、特に NULL 値を扱う場合に矛盾が発生することがよくあります。 2 つのクエリ例を使用してこれを調べてみましょう:

クエリ A:

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

クエリ B:

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

クエリ A は結果を生成しますが、クエリ B は結果を生成しません。 この違いは、SQL が NULL 値を含む比較をどのように処理するかに起因します。

クエリの分析

動作を理解するために各クエリを分析してみましょう:

クエリ A:

このクエリは次のように簡略化できます:

<code class="language-sql">SELECT 'true' WHERE 3 = 1 OR 3 = 2 OR 3 = 3 OR 3 = NULL;</code>

3 = 3TRUE と評価されるため、クエリは結果を返します。

クエリ B:

このクエリは次のように単純化されます。

<code class="language-sql">SELECT 'true' WHERE 3 != 1 AND 3 != 2 AND 3 != NULL;</code>

ANSI_NULLS が有効になっている場合 (ほとんどの SQL データベースのデフォルト)、3 != NULLUNKNOWN と評価されます。 AND を含む UNKNOWN 条件の場合、述語全体が UNKNOWN になり、行は返されません。

ANSI_NULLS が無効な場合、3 != NULLTRUE と評価され、行を返す可能性があります。

結論

NULL 句内に NOT IN 値が存在すると、SQL の 3 つの値のロジック (TRUE、FALSE、UNKNOWN) と ANSI_NULLS の設定により、クエリの結果に大きな影響を与えます。 NULL 値を操作するときは、予期しない結果を避けるためにこの動作に注意することが重要です。 LEFT JOIN チェックと IS NULL チェックを使用すると、多くの場合、そのようなシナリオで NULL 値を処理するためのより信頼性の高い代替手段が提供されます。

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

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