在T-SQL中,我应该使用!=还是来表示不相等?

我看到SQL同时使用!=<>表示不等于。什么是首选的语法,为什么?

我喜欢!=,因为<>让我想起了Visual Basic

对该问题的评论 (5)

大多数数据库支持!=(流行的编程语言)和<>(ANSI)。

同时支持!=<>的数据库。

  • MySQL 5.1。 [!=<>][1]
  • PostgreSQL 8.3: [!=<>][2]
  • SQLite。 [!=<>][3]
  • Oracle 10g。 [!=<>][4]
  • Microsoft SQL Server 2000/2005/2008/2012/2016。 [!=][5] 和[<>][6]
  • IBM Informix Dynamic Server 10: [!=<>][7]
  • InterBase/Firebird。 [!=<>][8]
  • Apache Derby 10.6: [!=<>][9]
  • Sybase Adaptive Server Enterprise 11.0: [!=<>][10]

支持ANSI标准运算符的数据库,独家

  • IBM DB2 UDB 9.5。 [<>][11]
  • Microsoft Access 2010。 [<>][12]

[1]: http://dev.mysql.com/doc/refman/5.1/en/comparison-operators.html#operator_not-equal [2]: http://www.postgresql.org/docs/current/static/functions-comparison.html#FUNCTIONS-COMPARISON-TABLE [3]: http://www.sqlite.org/lang_expr.html#binaryops [4]: http://download-west.oracle.com/docs/cd/B19306_01/server.102/b14200/conditions002.htm#CJAGAABC [5]: http://msdn.microsoft.com/en-us/library/ms190296.aspx [6]: http://msdn.microsoft.com/en-us/library/ms176020.aspx [7]: http://publib.boulder.ibm.com/infocenter/idshelp/v10/index.jsp?topic=/com.ibm.sqlt.doc/sqltmst46.htm [8]: http://www.ibphoenix.com/main.nfs?a=ibphoenix&amp;s=1239054922:316459&amp;page=ibp_60_sqlref。 [9]: http://db.apache.org/derby/docs/10.6/ref/rrefsqlj23075.html [10]: http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.help.sqlanywhere.11.0.0/dbreference_en11/coco.html [11]: http://publib.boulder.ibm.com/infocenter/iseries/v5r3/topic/db2/rbafzmstch2pred.htm [12]: [12]:http://office.microsoft.com/en-us/access-help/table-of-operators-HA010235862.aspx

评论(8)
解决办法

从技术上讲,如果你使用的是SQL Server AKA T-SQL,它们的功能是一样的。 如果你'在存储过程中使用它,就没有任何性能上的理由使用一个比其他。 然后,它归结为个人偏好。 我更喜欢使用<&gt。 因为它符合ANSI标准。

你可以在下面找到各种ANSI标准的链接...

[http://en.wikipedia.org/wiki/SQL][1]

[1]: http://en.wikipedia.org/wiki/SQL

评论(4)

''是来自SQL-92标准'!='是一个专有T-SQL操作符。它在其他数据库中也是可用的,但由于它不是标准的,你必须根据具体情况而定。

在大多数情况下,你会知道你连接的是什么数据库,所以这其实不是一个问题。在最坏的情况下,你可能要在你的SQL中做一个搜索和替换。

评论(4)

ANSI SQL标准将<>定义为"不等于&quot。 操作符。

http://www.contrib.andrew.cmu.edu/~shadow/sql/sql1992.txt (5.2 <token> 和<分隔符>)

根据ANSI/SQL 92标准,没有!=操作符。

评论(0)
评论(3)

似乎微软自己更喜欢<>而不是!=,这在他们的表格约束中得到了证明。 我个人比较喜欢用!=,因为我清楚地把它理解为"不等于",但如果你输入[field1 != field2],并把它保存为约束,下次查询时,就会显示为[field1 <> field2]。 这对我说,正确的方法是<>

评论(0)

!=尽管是非ANSI,但更符合SQL作为可读语言的真正精神。 它叫嚣着不平等。 <>说它'对我来说(小于,大于),这就很奇怪了。 我知道它的本意是,它's要么小于,要么大于,因此不等于,但这'是一种非常复杂的方式来表达一些非常简单的东西。

我'刚刚不得不把一些冗长的SQL查询,并把它们爱不释手地放到一个XML文件中,因为一大堆愚蠢的原因,我不会去说。

我只想说,XML根本就不是<>,我不得不把它们改成!=,并在我把自己弄坏之前检查自己。

评论(1)

你可以在T-SQL中使用你喜欢的任何一种。 文档][1]说它们的功能都是一样的。 我更喜欢!=,因为它读作"不等于&quot。 在我(基于C/C++/C#)看来,但数据库大师们似乎更喜欢<>

[1]: http://msdn.microsoft.com/en-us/library/ms190296(SQL.90).aspx

评论(0)

我知道C语法!=在SQL Server中,由于它的Unix传统(回到Sybase SQL Server时代,微软SQL Server 6.5之前)。

评论(0)

一个替代方案是使用<>!=以外的NULLIF操作符,如果两个参数相等,则返回NULL[微软文档中的NULLIF][1]。 所以我认为WHERE子句可以针对<>!=修改如下。

NULLIF(arg1, arg2) IS NOT NULL

我发现,在某些情况下,使用<>!=对日期不起作用。 因此,使用上面的表达式就可以满足需要了。

[1]: https://docs.microsoft.com/en-in/sql/t-sql/language-elements/nullif-transact-sql

评论(2)

我更喜欢使用!=而不是<>,因为有时我使用<s></s>语法来编写SQL命令。 在这种情况下使用!=更方便,可以避免语法错误。

评论(0)

它们在T-SQL中都被接受。 然而,似乎使用<>!=快得多。 我刚刚运行了一个使用!=的复杂查询,平均运行时间约为16秒。 我把这些改成了<>,现在查询的运行平均需要4秒左右。 这'是一个巨大的进步!

评论(2)

虽然它们的功能相同,但!=的意思是正好"不等于",而<>的意思是大于和小于存储的值。

考虑>=<=,当把你的索引考虑到查询时,这将是有意义的...... <>在某些情况下会运行得更快(有正确的索引),但在其他一些情况下(无索引),它们会运行得一样。

这也取决于你的数据库系统如何读取!=<>的值。 数据库提供商可能只是将其捷径化,使它们的功能相同,所以无论哪种方式都没有任何好处.PostgreSQL和SQL Server不捷径化。 它的读法是如上所示。

评论(3)