J'ai vu SQL
que ça utilise à la fois !=
et <>
pour pas égal . Quelle est la syntaxe préférée et pourquoi?
J'aime !=
, car <>
ça me rappelle Visual Basic
.
NOT (A = B)
.
J'ai vu SQL
que ça utilise à la fois !=
et <>
pour pas égal . Quelle est la syntaxe préférée et pourquoi?
J'aime !=
, car <>
ça me rappelle Visual Basic
.
NOT (A = B)
.
Réponses:
Techniquement, ils fonctionnent de la même manière si vous utilisez SQL Server AKA T-SQL. Si vous l'utilisez dans des procédures stockées, il n'y a aucune raison de performance à utiliser l'un sur l'autre. Cela revient alors à la préférence personnelle. Je préfère utiliser <> car il est conforme ANSI.
Vous pouvez trouver des liens vers les différentes normes ANSI à ...
!=
raison de son existence dans tous les langages influencés par C que j'ai utilisés, et parce que la documentation Python dit: "Les formes <>
et !=
sont équivalentes; pour la cohérence avec C, !=
est préférable; où !=
mentionné ci-dessous <>
est également accepté. L' <>
orthographe est considérée comme obsolète. " Mais SQL n'est pas Python!
<>
plus !=
spécifiquement pour la conformité ANSI, par exemple dans le kit de formation Microsoft Press pour examen 70-461, « Interrogation Microsoft SQL Server », disent - ils « À titre d'exemple quand choisir la forme standard, T-SQL prend en charge les deux « non égal à "opérateurs: <> et! =. Le premier est standard et le second ne l'est pas. Ce cas devrait être un nobrainer: optez pour le standard!"
La plupart des bases de données prennent en charge !=
(langages de programmation populaires) et<>
(ANSI).
Bases de données qui prennent en charge à la fois !=
et <>
:
!=
et<>
!=
et<>
!=
et<>
!=
et<>
!=
et<>
!=
et<>
!=
et<>
!=
et<>
!=
et<>
Bases de données qui prennent en charge l'opérateur standard ANSI, exclusivement :
NOT (a = b)
au lieu de (a <> b)
ou (a != b)
. Est-ce la même chose en interne?
'<>'
est issu de la norme SQL-92 et '!='
est un opérateur T-SQL propriétaire . Il est également disponible dans d'autres bases de données, mais comme il n'est pas standard, vous devez le prendre au cas par cas.
Dans la plupart des cas, vous saurez à quelle base de données vous vous connectez donc ce n'est pas vraiment un problème. Au pire, vous devrez peut-être faire une recherche et remplacer dans votre SQL.
!=
n'en fait pas partie. Même si, à toutes fins pratiques, il s'agit d'une norme de facto, nous ne devons pas confondre ce qui sont et ne sont pas des fonctionnalités standard.
La norme ANSI SQL définit <>
comme l'opérateur "différent de",
http://www.contrib.andrew.cmu.edu/~shadow/sql/sql1992.txt ( 5.2 <token> and <separator>
)
Il n'y a pas d' !=
opérateur selon la norme ANSI / SQL 92.
<>
est le SQL valide selon la norme SQL-92.
http://msdn.microsoft.com/en-us/library/aa276846(SQL.80).aspx
Ils sont à la fois valides et identiques par rapport à SQL Server ,
https://docs.microsoft.com/en-us/sql/t-sql/language-elements/not-equal-to-transact-sql-exclamation
Il semble que Microsoft préfère <>
lui-même !=
comme en témoignent leurs contraintes de table. Personnellement, je préfère utiliser !=
car je lis clairement que "pas égal", mais si vous le saisissez [field1 != field2]
et l'enregistrez en tant que constrait, la prochaine fois que vous l'interrogerez, il s'affichera comme [field1 <> field2]
. Cela me dit que la bonne façon de procéder est <>
.
!=
, bien qu'il ne soit pas ANSI, est davantage dans le véritable esprit de SQL en tant que langage lisible. Ça crie pas égal.
<>
dit que c'est pour moi (moins que, plus grand que) ce qui est juste bizarre. Je sais que l'intention est que ce soit inférieur ou supérieur à donc pas égal, mais c'est une façon très compliquée de dire quelque chose de vraiment simple.
Je viens de devoir prendre de longues requêtes SQL et les placer avec amour dans un fichier XML pour tout un tas de raisons stupides dans lesquelles je ne vais pas entrer.
Qu'il suffise de dire que XML n'est pas en panne <>
du tout et j'ai dû les changer !=
et me vérifier avant de me ruiner.
Vous pouvez utiliser celui que vous aimez dans T-SQL. La documentation indique qu'ils fonctionnent tous les deux de la même manière. Je préfère !=
, car il se lit "pas égal" à mon esprit (basé sur C / C ++ / C #), mais les gourous de la base de données semblent préférer <>
.
Une alternative serait d'utiliser l'opérateur NULLIF autre que <>
ou !=
qui renvoie NULL si les deux arguments sont NULLIF égaux dans Microsoft Docs . Je pense donc que la clause WHERE peut être modifiée pour <>
et !=
comme suit:
NULLIF(arg1, arg2) IS NOT NULL
Comme je l'ai constaté, l'utilisation <>
et !=
ne fonctionne pas pour la date dans certains cas. Par conséquent, l'utilisation de l'expression ci-dessus fait le nécessaire.
<>
qui concerne l'utilisation de l'index dans tous les cas d'angle. D'ailleurs, la lisibilité est certainement bien pire ...
J'ai préféré utiliser !=
plutôt que <>
parce que j'utilise parfois la <s></s>
syntaxe pour écrire des commandes SQL. L'utilisation !=
est plus pratique pour éviter les erreurs de syntaxe dans ce cas.
Ils sont tous les deux acceptés en T-SQL. Cependant, il semble que l'utilisation <>
fonctionne beaucoup plus rapidement que!=
. Je viens !=
d'exécuter une requête complexe qui était en cours d'utilisation et il a fallu environ 16 secondes en moyenne pour s'exécuter. J'ai changé ceux-ci en <>
et la requête prend maintenant environ 4 secondes en moyenne pour s'exécuter. C'est une énorme amélioration!
Bien qu'ils fonctionnent de la même manière, !=
signifie exactement "différent de", tandis que<>
signifie supérieur et inférieur à la valeur stockée.
Considérez >=
ou <=
, et cela aura du sens lorsque la prise en compte de vos index dans les requêtes ... <>
s'exécutera plus rapidement dans certains cas (avec le bon index), mais dans d'autres cas (sans index), ils fonctionneront de la même manière.
Cela dépend également de la façon dont votre système de bases de données lit les valeurs !=
et <>
. Le fournisseur de base de données peut simplement le raccourcir et le faire fonctionner de la même manière, il n'y a donc aucun avantage dans les deux cas. PostgreSQL et SQL Server ne le raccourcissent pas; il est lu tel qu'il apparaît ci-dessus.