Oracle 不等于(Not Equals)运算符

24

有两个不相等的运算符 - !=<>

它们之间有什么区别?我听说对于比较字符串,!= 比其他运算符更高效。能否有人对这个说法进行定性评论。


如果我必须猜的话,我会说其中一个是等价性与相等性的区别,就像在Java中!=.equals()之间的区别一样。但这只是猜测。 - corsiKa
已连接至: Oracle8i Enterprise Edition Release 8.1.7.4.1 - Production 带有分区选项 JServer Release 8.1.7.4.1 - ProductionSQL> select * from dual where 1!=2;

D

X
- N. Gasparotto
1
抱歉,无法正确格式化输出。但在9i之前已经存在了。 - N. Gasparotto
3
<>更有效率:想输入!=,需要按住Shift键,然后按下!键,接着松开Shift键,最后按下=键。但是如果要输入<>,只需要按住Shift键,然后打出<>即可,最后松开Shift键。这样做能够让你更快地编码!(开个玩笑 ;)) - Jeffrey Kemp
2
<> 是由 SQL 标准定义的,!= 是大多数 DBMS 也能理解的扩展。如果您想编写符合标准的 SQL,请使用 <> - user330315
6个回答

31

它们是相同的(第三种形式^=也是如此)。

需要注意的是,从解析器的角度来看,它们仍然被认为是不同的,即为!=定义的存储轮廓不会匹配<>^=

这与PostgreSQL不同,后者在解析阶段处理!=<>,因此您无法将!=<>重载为不同的运算符。


它们在Oracle 10.2及以上版本中具有显着的性能差异。请参见http://www.dba-oracle.com/t_not_equal_operator.htm。 - Junchen Liu
5
从链接中需要阅读的重要部分是,“Scott Canaan的这个笔记暗示在Oracle 10.2中,他们可以生成不同的执行计划,因此,执行速度也会不同。”-但最终没有证明这种效应,并且提出了几个(我认为是有效的)理论来解释观察到的行为-其中没有一个表明不同的语法会有任何区别-例如,更改查询的任何部分可能会导致重新解析语句或匹配不同的存储大纲。 - Jeffrey Kemp
@JeffreyKemp,那些人欺负我删掉了自己的答案,而我相信我的答案是正确的。唉...... - Junchen Liu
@JeffreyKemp 在不同的线程中,并没有冒犯之意。没有必要这样,Jef。https://dev59.com/qmct5IYBdhLWcg3wjuEj - Junchen Liu
@shanyangqu,谢谢,我能看到你已删除的问题和评论。顺便说一句,并没有说你的帖子有攻击性,我只是暗示这可能是我无法看到你的帖子的原因。不用生气了。 - Jeffrey Kemp
显示剩余2条评论

6

这两种语法在功能和性能方面没有区别。使用你喜欢的任何一种语法。

就像在声明函数或过程时使用AS和IS一样。它们是完全可以互换的。


我不知道你可以交换 ISAS。谢谢! - Luc M

4

这两个符号是相同的,但我听说开发人员使用!=而业务分析师使用<>


8
非常有趣!真正的程序员使用!= - Adam Hawkes

4
正如其他人所说,这两个运算符没有区别。(作为一个健全性检查,我进行了一些测试,但是这是浪费时间,它们当然是一样的。)
但实际上有四种不等运算符: !=、^=、<> 和 ¬=。请参见 Oracle SQL 参考中的此页面。在网站上,第四个运算符显示为 ÿ=,但在 PDF 中显示为 ¬=。根据文档,其中一些在某些平台上不可用。这实际上意味着 ¬= 几乎从不起作用。
只是出于好奇,我真的很想知道 ¬= 在哪些环境下能够工作。

1
你也可以使用“NOT(a = b)”语法。 - ShoeLace
出于好奇,我真的很想知道环境¬=在哪些系统上可以使用。这个符号是IBM大型机上的“非”字符。来自黑暗时代,那时男人还是男人,女人还是女人,恐龙在地球上漫步,计算机需要水冷却。 :-) - Bob Jarvis - Слава Україні

1

使用类似于MyBatis的框架的开发人员更喜欢使用!=而不是<>。原因在于<>需要用CDATA进行包装,因为它可能会被解释为XML语法。这样更容易阅读。


-2

区别在于:

“如果使用!=,它会返回亚秒级别。如果使用<>,则需要7秒才能返回。两者都会返回正确的答案。”

Oracle不等于(!=)SQL运算符

敬礼


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接