我应该使用!=或<>在T-SQL中不相等?

时间:2009-04-06 20:56:15

标签: sql sql-server tsql

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

我喜欢!=,因为<>提醒我Visual Basic

14 个答案:

答案 0 :(得分:696)

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

支持!=<>的数据库:

支持ANSI标准运算符的数据库,完全

  • IBM DB2 UDB 9.5:<>
  • Microsoft Access 2010:<>

答案 1 :(得分:506)

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

您可以在...

找到各种ANSI标准的链接

http://en.wikipedia.org/wiki/SQL

答案 2 :(得分:104)

'<>'来自SQL-92 standard'!='proprietary T-SQL运算符。它也可以在其他数据库中使用,但由于它不是标准的,因此必须根据具体情况进行处理。

在大多数情况下,您将知道您要连接的数据库,因此这不是一个真正的问题。在最坏的情况下,您可能需要在SQL中进行搜索和替换。

答案 3 :(得分:41)

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

http://www.contrib.andrew.cmu.edu/~shadow/sql/sql1992.txt5.2 <token> and <separator>

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

答案 4 :(得分:30)

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

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

答案 5 :(得分:21)

答案 6 :(得分:16)

似乎微软自己更喜欢<>!=,因为他们的表约束已经证明了这一点。我个人更喜欢使用!=,因为我清楚地将其视为“不相等”,但如果您输入[field1 != field2]并将其保存为constrait,则下次查询时,它将显示为{{ 1}}。这告诉我,正确的方法是[field1 <> field2]

答案 7 :(得分:14)

!=,尽管是非ANSI的,但它更像是一种可读语言的SQL。它尖叫不平等。 <>说这对我来说(少于,大于),这只是奇怪的。我知道它的意图是小于或大于不相等,但这是一种非常简单的说法。

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

完全可以说XML并没有被<>所取代,我不得不将它们更改为!=并在我自行毁坏之前检查自己。

答案 8 :(得分:10)

您可以在T-SQL中使用任何您喜欢的内容。 The documentation说它们都以相同的方式运作。我更喜欢!=,因为它与我的(基于C / C ++ / C#)头脑“不相等”,但数据库大师似乎更喜欢<>

答案 9 :(得分:8)

据我所知,C语法!=由于其Unix版本而在SQL Server中(在Sybase SQL Server时代,在Microsoft SQL Server 6.5之前)。

答案 10 :(得分:5)

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

NULLIF(arg1, arg2) IS NOT NULL

我发现,在某些情况下,使用<>!=对日期不起作用。因此,使用上述表达式是必要的。

答案 11 :(得分:1)

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

答案 12 :(得分:-5)

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

答案 13 :(得分:-10)

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

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

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