Maison >base de données >tutoriel mysql >Comment les valeurs NULL affectent-elles les résultats de la clause NOT IN de SQL ?
La clause NOT IN
de SQL et les nuances des valeurs NULL
La clause NOT IN
dans SQL sert à exclure les lignes correspondant aux valeurs dans une liste spécifiée. Cependant, la présence de NULL
valeurs au sein de cette liste introduit des complexités.
Le problème : résultats inattendus avec NULL
Considérez ces requêtes SQL :
<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>
La requête A donne un résultat, contrairement à la requête B. Cela vient de la façon dont SQL gère les NULL
comparaisons. La requête A vérifie si 3 est égal à n'importe quelle valeur dans la liste. Puisque 3 est égal à 3, cela renvoie un résultat.
La requête B, à l'inverse, vérifie si 3 n'est pas égal à chaque valeur. Avec ANSI_NULLS activé (valeur par défaut dans de nombreux systèmes), une comparaison impliquant NULL
donne UNKNOWN
. UNKNOWN
n'est ni vrai ni faux ; par conséquent, la requête B ne renvoie aucune ligne.
Paramètre ANSI_NULLS et son influence
La désactivation d'ANSI_NULLS modifie NULL
le comportement de comparaison. Avec ANSI_NULLS désactivé, une comparaison avec NULL
renvoie TRUE si les valeurs sont inégales et FALSE si elles sont égales. Par conséquent, la requête B renverrait un résultat avec ANSI_NULLS désactivé car 3 NOT IN (1, 2, NULL)
serait évalué à TRUE.
Comprendre la nature de NULL
Il est essentiel de se rappeler que NULL
signifie une valeur inconnue. Comparer NULL
à n'importe quelle valeur donne toujours UNKNOWN
car l'égalité ou l'inégalité ne peut pas être déterminée de manière définitive. Lors de l'utilisation de NOT IN
avec des valeurs NULL
, les problèmes potentiels doivent être anticipés et des techniques appropriées, telles que des vérifications NULL
explicites ou l'utilisation de COALESCE
pour remplacer NULL
par une valeur connue, doivent être mises en œuvre pour une gestion robuste des requêtes. .
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!