ホームページ > データベース > mysql チュートリアル > SQL の NOT IN 句で NULL 値が予期しない結果を引き起こすのはなぜですか?

SQL の NOT IN 句で NULL 値が予期しない結果を引き起こすのはなぜですか?

Mary-Kate Olsen
リリース: 2025-01-23 12:31:09
オリジナル
863 人が閲覧しました

Why Do NULL Values Cause Unexpected Results with SQL's NOT IN Clause?

SQL の NULL 値と NOT IN 句の予期しない動作を理解する

SQL クエリは、NULL 値が NOT IN 演算子と相互作用する場合に、しばしば驚くべき結果を生成します。 この矛盾は、NOT IN クエリと、LEFT JOIN.

を使用した同等のクエリを比較すると明らかになります。

次のクエリを考えてみましょう:

<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 値を処理する方法にあります。

ANSI_NULLS が有効になっている場合 (SQL Server 2005 などの多くのシステムのデフォルト)、NULL などの 3 = NULL を含む比較はすべて UNKNOWN と評価されます。この不確実性は、NULL に固有の不確実性から生じます。

クエリ B では、NOT IN 演算子がサブクエリで NULL に遭遇し、UNKNOWN 評価が行われます。 他に一致する値がないため、述語全体が UNKNOWN となり、空の結果セットが生成されます。

逆に、ANSI_NULLS を無効にすると動作が変わります。 ANSI_NULLS がオフの場合、3 = NULLTRUE と評価されます。 SQL は、NULL をそれ自体を含むすべてのものと潜在的に等しいものとして解釈します。 その結果、クエリ B の述語は TRUE と評価され、結果

が返されます。

要するに、一貫性のない結果は、NULL 設定によって決定される ANSI_NULLS 値の処理が異なることに起因します。 ANSI_NULLS がオンの場合、NULL との比較で UNKNOWN が生成され、NOT INNULL の値を使用するクエリで予期しない結果が発生します。 これは、正確なクエリ結果を得るために、SQL での NULL 処理を理解することの重要性を強調しています。

以上がSQL の NOT IN 句で NULL 値が予期しない結果を引き起こすのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート