MySQL : Comprendre les comparaisons de valeurs NULL
Aperçu :
Travailler efficacement avec MySQL nécessite une compréhension claire du comportement des valeurs NULL dans les opérations de comparaison. Cet article se concentre sur le comportement des valeurs NULL lors de l'utilisation de l'opérateur !=
(différent de).
Le problème :
Supposons qu'un tableau comprenne une colonne CODE
qui autorise les valeurs NULL. Pourquoi la requête ci-dessous omet-elle les lignes où CODE
est NULL, même si !=
est utilisé ?
<code class="language-sql">SELECT * FROM TABLE WHERE CODE!='C'</code>
La solution :
L'opérateur !=
de MySQL ne produit pas de résultat vrai/faux lors de la comparaison d'une valeur non NULL à NULL. La comparaison est considérée comme indéterminée.
Pour gérer correctement les NULL, utilisez IS NULL
ou IS NOT NULL
. La requête suivante exclut avec précision les lignes avec CODE
égal à « C » ou NULL :
<code class="language-sql">SELECT * FROM TABLE WHERE CODE IS NULL OR CODE!='C'</code>
Cette approche garantit que les deux conditions sont évaluées indépendamment, en excluant uniquement les lignes satisfaisant l'une ou l'autre condition.
Clarifications supplémentaires :
Bien que parfois vu dans la documentation ou les forums MySQL, CODE != ''
ne remplace pas CODE IS NOT NULL
. L'opérateur !=
compare les valeurs ; IS NULL
vérifie l'absence de valeur.
Ces requêtes ne sont donc pas équivalentes :
<code class="language-sql">SELECT * FROM TABLE WHERE CODE != '' SELECT * FROM TABLE WHERE CODE IS NOT NULL</code>
L'utilisation de IS NULL
et IS NOT NULL
garantit une gestion et des tests appropriés des valeurs NULL dans les requêtes MySQL.
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!