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这两个运算符&lt;&gt;!=之间是否有任何区别。

是否存在它们可以给出不同结果或不同性能的情况?

【问题讨论】:

Oracle Not Equals Operator 的可能重复项 Oracle Not Equals Operator的可能重复 【参考方案1】:

不,在功能上完全没有区别。 (所有其他 DBMS 也是如此——它们中的大多数都支持这两种样式):

这是当前的 SQL 参考:https://docs.oracle.com/database/121/SQLRF/conditions002.htm#CJAGAABC

SQL 标准只为“不等于”定义了一个运算符,即&lt;&gt;

【讨论】:

!= 更容易存储在 XML 文件中! IS NOT 等效/同义/.. 到&lt;&gt;!= 吗?三者可以同时使用吗?【参考方案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。因此,布尔值有自己的一组运算符,仅在逻辑上下文中有效(WHEREHAVING 或类似的子句)。 NOT 是 Oracle 的 SQL (AFAIK) 中唯一的布尔否定运算符。 ¬= -- worked on some obscure platforms in the dark ages - 是的,它们被称为“IBM 大型机”。从男人是男人,女人是女人,恐龙在地球上漫游,电脑是水冷的时代开始。 :-)【参考方案3】:

在大学里,我们被教导“最佳实践”是在为雇主工作时使用 !=,尽管上述所有运算符都具有相同的功能。

【讨论】:

SQL 标准(仅)将&lt;&gt; 定义为“不等于”运算符。所以我会考虑将其用作“最佳实践” 有趣。可能必须检查我所学的所有其他内容是否符合 SQL 标准。感谢您指出。 可能我的 C 遗产出来了,但我受不了 &lt;&gt; 而更喜欢 !=。主要是因为&lt;&gt; 在其“小于或大于”的说法中,对我来说,似乎假设数据类型具有隐式排序(这不一定是正确的,尽管对于所有 SQL 数据类型都是正确的),而 !=在非常纯粹的意义上说“不相等”。 编码标准通常取决于雇主。如果您的雇主没有编码标准,那么团队最好选择一个公开的标准。【参考方案4】:

根据这篇文章,!= 执行得更快

http://www.dba-oracle.com/t_not_equal_operator.htm

【讨论】:

虽然很受欢迎,但遗憾的是,该网站并不是许多主题的可靠来源。这个问题之前讨论过here。尽管有赏金,但没有人能够创建一个测试用例来展示性能的显着差异。但我的提议仍然有效 - 如果你能创建一个测试用例证明 != 比其他不等于运算符更快,我会给你 500 分的赏金。

以上是关于Oracle Sql中的“!=”和“<>”有啥区别吗?的主要内容,如果未能解决你的问题,请参考以下文章

从XML到Oracle PL / SQL环境中的路径列表

如何在 Oracle SQL 中的 XML 标记中进行搜索?

实验五:Oracle中的SQL使用

Oracle PL/SQL 使用 XMLTABLE 解析 xml 中的嵌套对象

使用 Oracle 数据库中的 SQL 从 XML Clob 中提取数据

Oracle中的PLsql的符号解释大全