提问



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


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

最佳参考


从技术上讲,如果您使用SQL  Server AKA T-SQL,它们的功能相同。如果您在存储过程中使用它,则没有性能原因可以使用它而不是另一个。然后归结为个人偏好。我更喜欢使用<>,因为它符合ANSI标准。


您可以在...找到各种ANSI标准的链接。


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

其它参考1


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


支持!=<>的数据库:



  • MySQL 5.1:!=<>

  • PostgreSQL 8.3:!=<>

  • SQLite:!=<>

  • Oracle 10g:!=<>

  • Microsoft SQL Server 2000/2005/2008/2012/2016:!=<>

  • IBM Informix Dynamic Server 10:!=<>

  • InterBase/Firebird:!=<>

  • Apache Derby 10.6:!=<>

  • Sybase Adaptive Server Enterprise 11.0:!=<>



支持ANSI标准运算符的数据库,完全:[73] [74] [75] [76] [77] [78] [79] [80] [81] [82]



  • IBM DB2 UDB 9.5:<>

  • Microsoft Access 2010:<>


其它参考2


'<>'来自SQL-92标准,'!='是专有的T-SQL运算符。它也可以在其他数据库中使用,但由于它不是标准的,你必须根据具体情况来看。[83] [84] [85] [86]]]


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

其它参考3


ANSI SQL标准将<>定义为不等于运算符,


http://www.contrib.andrew.cmu.edu/~shadow/sql/sql1992.txt( 5.2 <token> and <separator>)[87]


根据ANSI/SQL 92标准,没有!=运算符。

其它参考4


<>是根据SQL-92标准的有效SQL。


http://msdn.microsoft.com/en-us/library/aa276846(SQL.80).aspx[88]

其它参考5


它们既有效又相对于SQL Server,[89]


https://docs.microsoft.com/en-us/sql/t-sql/language-elements/not-equal-to-transact-sql-exclamation[90]

其它参考6


似乎微软本身更喜欢<>!=,因为它们在表格约束中得到了证明。我个人更喜欢使用!=,因为我清楚地将其视为不相等,但如果您输入[field1 != field2]并将其保存为constrait,则下次查询时,它将显示为[field1 <> field2]。这告诉我,正确的做法是<>

其它参考7


!=尽管是非ANSI的,但它更符合SQL作为可读语言的真正精神。它尖叫不平等。
<>说这对我来说(少于,大于)这只是奇怪的。我知道它的意图是它要么小于或大于不相等,而是这是一种非常复杂的方式。说一些非常简单的话。


我只需要进行一些长时间的SQL查询,并将它们巧妙地放入XML文件中,这是因为我不会进入的一大堆愚蠢原因。


可以说XML根本没有<>,我不得不将它们改为!=并在我自己毁坏之前检查自己。

其它参考8


你可以在T-SQL中使用你喜欢的任何一个。文档说它们都以相同的方式运行。我更喜欢!=,因为它与我的(基于C/C ++/C#)思想不相等,但数据库专家似乎更喜欢<>[91]

其它参考9


据我所知,C语法!=在SQL Server中是由于它的Unix传统(早在Sybase SQL Server时代,Microsoft SQL之前的服务器6.5)。

其它参考10


一种替代方法是使用除<>!=之外的NULLIF运算符,如果两个参数在Microsoft Docs中等于NULLIF,则返回NULL。所以我相信WHERE子句可以修改为<>!=如下:[92]


NULLIF(arg1, arg2) IS NOT NULL


正如我发现的那样,在某些情况下使用<>!=并不适用于日期。因此使用上述表达式是必要的。

其它参考11


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

其它参考12


它们都在T-SQL中被接受。但是,似乎使用 <>的工作速度比!= 快得多。我刚刚运行了一个使用!=的复杂查询,平均需要大约16秒才能运行。我将它们更改为<>,现在查询平均需要大约4秒才能运行。这是一个巨大的进步!

其它参考13


虽然它们的功能相同,但!=表示不等于,而<>表示大于和小于存储的值。


考虑>=<=,这在将索引分解为查询时会有意义... <>在某些情况下运行得更快(使用正确的索引),但在其他一些情况下案例(无索引)它们将运行相同。


这还取决于数据库系统如何读取值!=<>。数据库提供程序可能只是将其快捷方式并使它们的功能相同,因此无论如何都没有任何好处.PostgreSQL和SQL 服务器不会快捷这个;它会在上面显示时被读取。