177 votes

SQL est nul et = nul

Double Possible:
qu'est-ce que “=null”; “ NULL”
Quelle est la différence entre les deux EST NULLE et =NULL

Quelle est la différence entre

where x is null

et

where x = null

et pourquoi ce dernier ne fonctionne pas?

191voto

Bohemian Points 134107

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

95voto

Curt Points 42871

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

10voto

Sarfraz Points 168484

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
 

4voto

Vikram Points 5223

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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X