【发布时间】:2012-05-25 22:09:08
【问题描述】:
我想知道Oracle中not equal这两个运算符<>和!=之间是否有任何区别。
是否存在它们可以给出不同结果或不同性能的情况?
【问题讨论】:
-
Oracle Not Equals Operator 的可能重复项
我想知道Oracle中not equal这两个运算符<>和!=之间是否有任何区别。
是否存在它们可以给出不同结果或不同性能的情况?
【问题讨论】:
不,在功能上完全没有区别。
(所有其他 DBMS 也是如此 - 它们中的大多数都支持这两种样式):
这是当前的 SQL 参考:https://docs.oracle.com/database/121/SQLRF/conditions002.htm#CJAGAABC
SQL 标准只为“不等于”定义了一个运算符,即<>
【讨论】:
IS NOT 等价/同义/.. 到<> 和!= 吗?这三个可以同时使用吗?
其实这个算子有四种形式:
<>
!=
^=
甚至
¬= -- worked on some obscure platforms in the dark ages
它们是相同的,但在需要逐字匹配(存储的大纲或缓存的查询)时会有所不同。
【讨论】:
NOT(x = y)、!(x = y) 等变体?
^=(当我第一次发布手册链接时,我自己看到了)。但是您关于缓存查询的观点很好。
Oracle 中,布尔不是SQL 中的一等类型(与PL/SQL 不同)。 IE。你不能像在其他一些系统中那样SELECT 1 = 1 FROM dual。因此,布尔值有自己的一组运算符,仅在逻辑上下文中有效(WHERE 或 HAVING 或类似的子句)。 NOT 是 Oracle 的 SQL (AFAIK) 中唯一的布尔否定运算符。
¬= -- worked on some obscure platforms in the dark ages - 是的,它们被称为“IBM 大型机”。从男人是男人,女人是女人,恐龙在地球上漫游,电脑是水冷的时代开始。 :-)
在大学里,我们被教导“最佳实践”是在为雇主工作时使用 !=,尽管上述所有运算符都具有相同的功能。
【讨论】:
<> 定义为“不等于”运算符。所以我会考虑将其用作“最佳实践”
<> 而更喜欢 !=。主要是因为<> 在其“小于或大于”的说法中,对我来说,似乎假设数据类型具有隐式排序(这不一定是正确的,尽管对于所有 SQL 数据类型都是正确的),而 !=在非常纯粹的意义上说“不相等”。
根据这篇文章,!= 执行得更快
【讨论】: