ホームページ >データベース >mysql チュートリアル >NULL 値は SQL の NOT IN 句の結果にどのような影響を与えますか?
SQL の NOT IN 句の NULL について理解する
SQL の NOT IN
句の動作は、NULL
値の存在によって大きく影響されます。 この微妙な違いを注意深く考慮しないと、予期しない結果が生じる可能性があります。 次の例は、この動作を示しています。
クエリの例 1:
<code class="language-sql">select 'true' where 3 in (1, 2, 3, null)</code>
このクエリは次のように評価されます:
<code>3 = 1 OR 3 = 2 OR 3 = 3 OR 3 = NULL</code>
3 = 3
が true であるため、クエリは結果を返します。
クエリの例 2:
<code class="language-sql">select 'true' where 3 not in (1, 2, null)</code>
これは以下と同等です:
<code class="language-sql">3 <> 1 AND 3 <> 2 AND 3 <> NULL</code>
ANSI_NULLS
が有効になっている場合 (ほとんどの SQL データベースの標準設定)、3 <> NULL
は UNKNOWN
と評価されます。 AND
を含む UNKNOWN
条件の結果は UNKNOWN
となり、UNKNOWN
句では WHERE
が false として扱われます。したがって、このクエリは行を返しません。
ANSI_NULLS
を無効にすると、この動作が変更されます。 ANSI_NULLS
がないと、3 <> NULL
が true と評価され、クエリが結果を返す可能性があります。これは、NULL
値によってもたらされた矛盾を強調しています。
結論:
NOT IN
を使用する場合は、リスト内の潜在的な NULL
値を常に考慮してください。 SQL の 3 つの値のロジック (TRUE、FALSE、UNKNOWN) により、NULL
の存在はクエリの結果に大きな影響を与えます。 より予測可能で信頼性の高い結果を得るには、NOT IN
値を使用した NULL
を避け、NOT EXISTS
などの代替アプローチを使用することをお勧めします。
以上がNULL 値は SQL の NOT IN 句の結果にどのような影響を与えますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。