Oracle Sql中的“!=”和“<>”有啥区别吗?
Posted
技术标签:
【中文标题】Oracle Sql中的“!=”和“<>”有啥区别吗?【英文标题】:Is there any difference between "!=" and "<>" in Oracle Sql?Oracle Sql中的“!=”和“<>”有什么区别吗? 【发布时间】:2012-05-25 22:09:08 【问题描述】:我想知道Oracle中not equal
这两个运算符<>
和!=
之间是否有任何区别。
是否存在它们可以给出不同结果或不同性能的情况?
【问题讨论】:
Oracle Not Equals Operator 的可能重复项 Oracle Not Equals Operator的可能重复 【参考方案1】:不,在功能上完全没有区别。 (所有其他 DBMS 也是如此——它们中的大多数都支持这两种样式):
这是当前的 SQL 参考:https://docs.oracle.com/database/121/SQLRF/conditions002.htm#CJAGAABC
SQL 标准只为“不等于”定义了一个运算符,即<>
【讨论】:
!= 更容易存储在 XML 文件中! 是IS NOT
等效/同义/.. 到<>
和!=
吗?三者可以同时使用吗?【参考方案2】:
其实这个算子有四种形式:
<>
!=
^=
甚至
¬= -- worked on some obscure platforms in the dark ages
它们是相同的,但在需要逐字匹配(存储的大纲或缓存的查询)时会有所不同。
【讨论】:
还有类似NOT(x = y)
、!(x = y)
等的变体?
有趣!我不知道^=
(我第一次发布手册链接时自己看到了)。但是您关于缓存查询的观点很好。
@Dems: 在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 大型机”。从男人是男人,女人是女人,恐龙在地球上漫游,电脑是水冷的时代开始。 :-)【参考方案3】:
在大学里,我们被教导“最佳实践”是在为雇主工作时使用 !=,尽管上述所有运算符都具有相同的功能。
【讨论】:
SQL 标准(仅)将<>
定义为“不等于”运算符。所以我会考虑将其用作“最佳实践”
有趣。可能必须检查我所学的所有其他内容是否符合 SQL 标准。感谢您指出。
可能我的 C 遗产出来了,但我受不了 <>
而更喜欢 !=
。主要是因为<>
在其“小于或大于”的说法中,对我来说,似乎假设数据类型具有隐式排序(这不一定是正确的,尽管对于所有 SQL 数据类型都是正确的),而 !=
在非常纯粹的意义上说“不相等”。
编码标准通常取决于雇主。如果您的雇主没有编码标准,那么团队最好选择一个公开的标准。【参考方案4】:
根据这篇文章,!= 执行得更快
http://www.dba-oracle.com/t_not_equal_operator.htm
【讨论】:
虽然很受欢迎,但遗憾的是,该网站并不是许多主题的可靠来源。这个问题之前讨论过here。尽管有赏金,但没有人能够创建一个测试用例来展示性能的显着差异。但我的提议仍然有效 - 如果你能创建一个测试用例证明 != 比其他不等于运算符更快,我会给你 500 分的赏金。以上是关于Oracle Sql中的“!=”和“<>”有啥区别吗?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Oracle SQL 中的 XML 标记中进行搜索?
Oracle PL/SQL 使用 XMLTABLE 解析 xml 中的嵌套对象