Quelqu'un pourrait-il expliquer le comportement suivant en SQL?
SELECT * FROM MyTable WHERE MyColumn != NULL (0 Results)
SELECT * FROM MyTable WHERE MyColumn <> NULL (0 Results)
SELECT * FROM MyTable WHERE MyColumn IS NOT NULL (568 Results)
Quelqu'un pourrait-il expliquer le comportement suivant en SQL?
SELECT * FROM MyTable WHERE MyColumn != NULL (0 Results)
SELECT * FROM MyTable WHERE MyColumn <> NULL (0 Results)
SELECT * FROM MyTable WHERE MyColumn IS NOT NULL (568 Results)
<>
est la norme SQL-92; !=
est son équivalent. Les deux évaluent les valeurs, NULL
n'étant pas - NULL
étant un espace réservé pour dire qu'il n'y a pas de valeur.
C'est pourquoi vous ne pouvez utiliser que IS NULL
/ IS NOT NULL
comme prédicats pour de telles situations.
Ce comportement n'est pas spécifique à SQL Server. Tous les dialectes SQL conformes aux normes fonctionnent de la même manière.
Notez que ce comportement est le comportement par défaut (ANSI).
Si vous:
SET ANSI_NULLS OFF
http://msdn.microsoft.com/en-us/library/ms188048.aspx
Vous obtiendrez des résultats différents.
SET ANSI_NULLS OFF
vont apparemment partir à l'avenir ...
En SQL, tout ce que vous évaluez / calculez avec les résultats NULL
dans INCONNU
C'est pourquoi SELECT * FROM MyTable WHERE MyColumn != NULL
ou SELECT * FROM MyTable WHERE MyColumn <> NULL
vous donne 0 résultats.
Pour vérifier les valeurs NULL
, la fonction isNull est fournie.
De plus, vous pouvez utiliser l'opérateur IS
comme vous l'avez utilisé dans la troisième requête.
J'espère que cela t'aides.
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.