ホームページ >データベース >mysql チュートリアル >NULL 値は NOT IN 句の結果にどのような影響を与えますか?
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 = 3
は TRUE
と評価されるため、クエリは結果を返します。
クエリ B:
このクエリは次のように単純化されます。
<code class="language-sql">SELECT 'true' WHERE 3 != 1 AND 3 != 2 AND 3 != NULL;</code>
ANSI_NULLS
が有効になっている場合 (ほとんどの SQL データベースのデフォルト)、3 != NULL
は UNKNOWN
と評価されます。 AND
を含む UNKNOWN
条件の場合、述語全体が UNKNOWN
になり、行は返されません。
ANSI_NULLS
が無効な場合、3 != NULL
は TRUE
と評価され、行を返す可能性があります。
結論
NULL
句内に NOT IN
値が存在すると、SQL の 3 つの値のロジック (TRUE、FALSE、UNKNOWN) と ANSI_NULLS
の設定により、クエリの結果に大きな影響を与えます。 NULL
値を操作するときは、予期しない結果を避けるためにこの動作に注意することが重要です。 LEFT JOIN
チェックと IS NULL
チェックを使用すると、多くの場合、そのようなシナリオで NULL
値を処理するためのより信頼性の高い代替手段が提供されます。
以上がNULL 値は NOT IN 句の結果にどのような影響を与えますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。