小编典典

Oracle "(+)" 运算符

all

我正在检查一些旧的 SQL 语句,以便记录它们并可能增强它们。

DBMS 是甲骨文

我不明白这样的声明:

select ...
from a,b
where a.id=b.id(+)

我对(+)运算符感到困惑,并且无法在任何论坛上获得它......(在引号内搜索 + 也不起作用)。

无论如何,我使用了 SQLDeveloper 的“解释计划”,我得到了一个输出HASH JOIN, RIGHT OUTER,等等。

(+)如果我在查询结束时删除运算符,会有什么不同吗?数据库是否必须满足某些条件(例如具有某些索引等)才能(+)使用?如果您能给我提供一个简单的理解,或者提供一些我可以阅读相关内容的好链接,那将非常有帮助。

谢谢!


阅读 67

收藏
2022-07-28

共1个答案

小编典典

这是 OUTER JOIN 的 Oracle 特定表示法,因为 ANSI-89 格式(在 FROM 子句中使用逗号分隔表引用)没有标准化 OUTER 连接。

查询将以 ANSI-92 语法重写为:

   SELECT ...
     FROM a
LEFT JOIN b ON b.id = a.id

这个链接很好地解释了 JOIN 之间的区别


还应该注意的是,即使(+)有效,Oracle 建议 不要
使用它

Oracle 建议您使用FROM子句OUTER JOIN语法而不是 Oracle 连接运算符。使用 Oracle
连接运算符(+)的外连接查询受以下规则和限制的约束,这些规则和限制不适用于FROM子句OUTER JOIN语法:

2022-07-28