J'ai une colonne appelée CODE dans une table MySQL qui peut être NULL. Disons que j'ai quelques lignes avec CODE = 'C' que je veux ignorer dans mon jeu de résultats sélectionné. Je peux avoir CODE = NULL ou CODE! = 'C' dans mon jeu de résultats.
La requête suivante ne renvoie pas de ligne avec CODE comme NULL:
SELECT * from TABLE where CODE!='C'
Mais cette requête fonctionne comme prévu et je sais que c'est la bonne façon de le faire.
SELECT * from TABLE where CODE IS NULL OR CODE!='C'
Ma question est pourquoi le fait d'avoir seulement CODE! = 'C' ne renvoie pas les lignes où CODE = NULL? Certainement 'C' n'est pas NULL. Nous ne comparons aucune valeur à un personnage ici. Quelqu'un peut-il éclairer pourquoi cela ne fonctionne pas de cette façon?
Dans MySQL, NULL
est considéré comme une "valeur inconnue manquante", par opposition à aucune valeur. Jetez un oeil à cette référence MySQL sur NULL .
Toute comparaison arithmétique avec NULL
ne renvoie pas vrai ou faux, mais renvoie NULL
à la place., Donc, NULL != 'C'
renvoie NULL
, au lieu de renvoyer true.
Toute comparaison arithmétique avec 'NULL' retournera false. Pour vérifier cela dans SQL:
SELECT IF(NULL=123,'true','false')
Pour vérifier les valeurs de NULL
, nous devons utiliser IS NULL
& IS NOT NULL
opérateur.
Basé sur mes tests et la documentation ici: http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html
Vous pouvez comparer null et obtenir un résultat booléen en utilisant <=>
REMARQUE: il ressemble à l'opérateur NOT EQ, mais c'est l'opérateur EQ
Par exemple:
select x <=> y;
or
select @x <=> @y;
Cela compare également string vs null, string vs string, etc.
En SQL, la valeur NULL est une valeur spéciale, non comparable à aucune autre. Le résultat d'une comparaison directe avec un NULL est toujours NULL, bien que (malheureusement) vous puissiez trouver FAUX dans certaines implémentations.
Pour tester une valeur nulle, vous devez utiliser IS NULL
et IS NOT NULL
.
SELECT *
FROM `table_name`
WHERE IFNULL(`column_name` != 'C', TRUE)
sélectionnez * de l'utilisateur où application_id = '1223333344' et le nom est nul;