web-dev-qa-db-fra.com

SQL est nul et = nul

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?

108
Sachin Kainth

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

120
Bohemian

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

57
Curt

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
6
Sarfraz

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.

3
Vikram