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

Comment les valeurs NULL affectent-elles les résultats de la clause NOT IN de SQL ?

Patricia Arquette
Patricia Arquetteoriginal
2025-01-23 12:51:13686parcourir

How Do NULL Values Affect the Results of SQL's NOT IN Clause?

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!

Déclaration:
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