Double Possible:
qu'est-ce que “=null”; “ NULL”
Quelle est la différence entre les deux EST NULLE et =NULLQuelle est la différence entre
where x is null
et
where x = null
et pourquoi ce dernier ne fonctionne pas?
Réponses
Trop de publicités?En SQL, une comparaison entre un null
de la valeur et de toute autre valeur (y compris un autre null
) d'un à l'aide d'un opérateur logique (par exemple, =
, !=
, <
, etc) sera dans un null
, ce qui est considéré comme l' false
pour l'application d'une clause where. Le raisonnement est que l' null
signifie "inconnu", de sorte que le résultat de la comparaison à un null
est également de "inconnu". De sorte que vous n'aurez pas frapper sur les lignes à l'aide d' my_column = null
.
SQL fournit la syntaxe spéciale pour tester si une colonne est null
, via is null
et is not null
, ce qui est une condition spéciale pour tester un null
(ou non un null
).
Voici quelques SQL montrant une variété de conditions et comment ils sont tous de retour pas de lignes 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
La première méthode consiste à vérifier si une valeur de champ est null
alors que plus tard ne fonctionnera pas comme prévu car null
est une valeur spéciale qui ne correspond à rien, vous pouvez donc N'utilisez pas la comparaison d'égalité en utilisant =
pour cela.
Ainsi, lorsque vous devez vérifier si une valeur de 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 que c'est intrinsèquement inconnu. null combiné avec toute autre valeur est null - unknown. Demander à SQL "Ma valeur est-elle égale à null?" serait inconnu à chaque fois, même si l'entrée est nulle. Je pense que la mise en œuvre de IS NULL le clarifie.