SQL != Opérateur et l'énigme NULL
L'opérateur !=
(pas égal) de SQL présente un défi unique lorsqu'il s'agit de valeurs NULL
. Bien qu'il compare efficacement les valeurs non NULL, son comportement avec NULL
est contre-intuitif.
Le problème avec != NULL
Considérez ceci :
<code class="language-sql">SELECT * FROM MyTable WHERE MyColumn != NULL; -- Returns 0 rows SELECT * FROM MyTable WHERE MyColumn NULL; -- Also returns 0 rows</code>
Ces requêtes, visant à trouver des lignes où MyColumn
n'est pas NULL
, renvoient étonnamment des ensembles de résultats vides. Ce n'est pas un bug ; c'est dû à la nature de NULL
. NULL
ne représente pas une valeur ; il représente l'absence d'une valeur. Par conséquent, comparer une valeur à NULL
en utilisant !=
ou =
donne toujours UNKNOWN
, pas TRUE
ou FALSE
.
La solution : IS NOT NULL
Pour identifier avec précision les valeurs non NULL, utilisez le prédicat IS NOT NULL
:
<code class="language-sql">SELECT * FROM MyTable WHERE MyColumn IS NOT NULL; -- Returns the expected rows</code>
IS NOT NULL
(et son homologue, IS NULL
) sont spécifiquement conçus pour gérer les valeurs NULL
dans les comparaisons SQL.
Comparaison avec des valeurs non NULL
L'opérateur !=
fonctionne comme prévu lors de la comparaison avec des valeurs non NULL :
<code class="language-sql">SELECT * FROM MyTable WHERE MyColumn != 'ValueX'; -- Returns rows where MyColumn is not 'ValueX'</code>
Clé à retenir
Les requêtes SQL précises impliquant des valeurs NULL
nécessitent l'utilisation de IS NOT NULL
et IS NULL
. Évitez d'utiliser !=
ou =
pour NULL
comparaisons afin d'éviter des résultats inattendus. Utilisez ces prédicats dédiés pour une gestion fiable de NULL
dans vos instructions SQL.
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!