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>
Cette requête donne :
<code>3 = 1 OR 3 = 2 OR 3 = 3 OR 3 = NULL</code>
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>
Cela équivaut à :
<code class="language-sql">3 <> 1 AND 3 <> 2 AND 3 <> NULL</code>
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!