Maison > base de données > tutoriel mysql > Comment les valeurs NULL affectent-elles les résultats des clauses NOT IN dans SQL ?

Comment les valeurs NULL affectent-elles les résultats des clauses NOT IN dans SQL ?

Susan Sarandon
Libérer: 2025-01-23 12:42:12
original
516 Les gens l'ont consulté

How Do NULL Values Affect the Results of NOT IN Clauses in SQL?

Comprendre les NULL dans la clause NOT IN de SQL

Le comportement des clauses NOT IN en SQL est significativement affecté par la présence de valeurs NULL. Cette différence subtile peut conduire à des résultats inattendus si elle n’est pas soigneusement prise en compte. Les exemples suivants illustrent ce comportement.

Exemple de requête 1 :

<code class="language-sql">select 'true' where 3 in (1, 2, 3, null)</code>
Copier après la connexion

Cette requête donne :

<code>3 = 1 OR 3 = 2 OR 3 = 3 OR 3 = NULL</code>
Copier après la connexion

Parce que 3 = 3 est vrai, la requête renvoie un résultat.

Exemple de requête 2 :

<code class="language-sql">select 'true' where 3 not in (1, 2, null)</code>
Copier après la connexion

Cela équivaut à :

<code class="language-sql">3 <> 1 AND 3 <> 2 AND 3 <> NULL</code>
Copier après la connexion

Avec ANSI_NULLS activé (le paramètre standard dans la plupart des bases de données SQL), 3 <> NULL est évalué à UNKNOWN. Une condition AND avec UNKNOWN donne UNKNOWN, et UNKNOWN est traitée comme fausse dans une clause WHERE. Par conséquent, cette requête ne renvoie aucune ligne.

La désactivation ANSI_NULLS modifie ce comportement. Sans ANSI_NULLS, 3 <> NULL pourrait être évalué comme vrai, ce qui amènerait la requête à renvoyer un résultat. Cela met en évidence l'incohérence introduite par les NULL valeurs.

Conclusion :

Lorsque vous utilisez NOT IN, tenez toujours compte des valeurs potentielles NULL dans la liste. La présence de NULL a un impact significatif sur le résultat de la requête en raison de la logique à trois valeurs de SQL (VRAI, FAUX, INCONNU). Il est recommandé d'éviter NOT IN avec des valeurs NULL et d'utiliser des approches alternatives comme NOT EXISTS pour des résultats plus prévisibles et fiables.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal