我应该在T-SQL中使用!=还是<>不等于?

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

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

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

你可以find各种ANSI标准的链接…

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

大多数数据库支持!= (stream行编程语言)和<> (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标准操作符的数据库:

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

'<>'来自SQL-92标准 , '!='是专有的 T-SQL操作符。 它也可以在其他数据库中使用,但是由于它不是标准的,所以你必须逐个考虑。

在大多数情况下,你会知道你连接的数据库,所以这不是一个真正的问题。 在最糟糕的情况下,你可能不得不在你的SQL中进行search和replace。

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

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

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

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

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

看起来,微软自己喜欢<>!=来certificate他们的表约束。 我个人更喜欢使用!=因为我清楚地读到“不等于”,但是如果input[field1 != field2]并保存为constrait,那么下次查询时,它会显示为[field1 <> field2] 。 这对我说,正确的做法是<>

你可以在T-SQL中使用你喜欢的任何一个。 文件说,他们都function相同的方式。 我更喜欢!= ,因为它读取“不等于”我(基于C / C ++ / C#)的头脑,但数据库大师似乎更喜欢<>

!=尽pipe不是ANSI,但更像SQL这种可读性语言的精神。 它尖叫不平等。 <>对我说(小于,大于),这是奇怪的。 我知道它的意图是说要么小于或者大于因此不是平等的,但是说一些非常简单的东西真的很复杂。

我只是需要一些长时间的SQL查询,并把它们深深地放在一个XML文件中,这是因为我不会去做一些愚蠢的事情。

我只想说XML并没有完全解决问题,我不得不将它们改成!=并在我自己破坏之前检查自己。

我知道C语法!=在SQL Server中是由于它的Unix遗产(早在Microsoft SQL Server 6.5之前的Sybase SQL Server日子里)。

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

 NULLIF(arg1, arg2) IS NOT NULL 

正如我发现的那样,在某些情况下,使用<>!=在date中不起作用。 因此,使用上述expression式是必要的。

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

他们都在T-SQL中被接受。 不过,使用<>似乎!=快得多 。 我刚刚运行了一个使用!=的复杂查询,平均运行时间大约为16秒。 我将它们更改为<> ,现在查询平均需要大约4秒钟才能运行。 这是一个巨大的改善!

虽然它们的function相同,但!=意味着“不等于”,而<>意味着大于和小于存储的值。

考虑>=或者<= ,这在将索引分解为查询时有意义… <>在某些情况下(使用正确的索引)将运行得更快,但是在其他一些情况下(索引为空)一样。

这也取决于你的数据库系统如何读取值!=<> 。 数据库提供者可能只是简单的使它们的function一样,所以没有任何好处。 PostgreSQL和SQL Server不会缩短这个; 它会像上面显示的那样被读取。