Duplicate possible:
que sont “= null” et “IS NULL”)
Y a-t-il une différence entre IS NULL et = NULL
Quelle est la différence entre
where x is null
et
where x = null
et pourquoi ce dernier ne fonctionne-t-il pas?
En SQL, une comparaison entre une valeur null
et toute autre valeur (y compris un autre null
) utilisant un opérateur de comparaison (par exemple, =
, !=
, <
, etc) donnera null
, considéré comme false
aux fins d’une clause where (à proprement parler, c’est "pas vrai", plutôt que "faux", mais l'effet est le même).
Le raisonnement est qu'un null
signifie "inconnu", de sorte que le résultat de toute comparaison avec un null
est également "inconnu". Donc, vous n'obtiendrez aucun résultat sur les lignes en codant where my_column = null
.
SQL fournit la syntaxe spéciale pour tester si une colonne est null
, via is null
et is not null
, qui est une condition spéciale pour tester un null
(ou pas un null
).
Voici quelques instructions SQL illustrant diverses conditions et leurs effets, comme indiqué ci-dessus.
create table t (x int, y int);
insert into t values (null, null), (null, 1), (1, 1);
select 'x = null' as test , x, y from t where x = null
union all
select 'x != null', x, y from t where x != null
union all
select 'not (x = null)', x, y from t where not (x = null)
union all
select 'x = y', x, y from t where x = y
union all
select 'not (x = y)', x, y from t where not (x = y);
renvoie seulement 1 ligne (comme prévu):
TEST X Y
x = y 1 1
Voir cette course sur SQLFiddle
Il est important de noter que NULL n'est pas égal à NULL.
NULL
n'est pas une valeur et ne peut donc pas être comparé à une autre valeur.
where x is null
vérifie si x est une valeur nulle.
where x = null
vérifie si x est égal à NULL, ce qui ne sera jamais vrai
La première consiste à vérifier si une valeur de champ est null
alors que plus tard, cela ne fonctionnera pas comme prévu car null
est une valeur spéciale qui ne correspond à rien, vous ne pouvez donc pas utiliser la comparaison d'égalité en utilisant =
pour ça.
Ainsi, lorsque vous devez vérifier si la valeur d'un champ est null
ou non, utilisez:
where x is null
au lieu de:
where x = null
Je pense que l'égalité est quelque chose qui peut être absolument déterminé. Le problème avec null
est qu’il est par nature inconnu. Null
combiné avec toute autre valeur est null
- inconnu. Asking SQL "Ma valeur est-elle égale à null
?" serait inconnu à chaque fois, même si l'entrée est null
. Je pense que la mise en œuvre de IS NULL
rend les choses claires.