我正在检查一些旧的 SQL 语句,以便记录它们并可能增强它们。
DBMS 是甲骨文
我不明白这样的声明:
select ... from a,b where a.id=b.id(+)
我对(+)运算符感到困惑,并且无法在任何论坛上获得它......(在引号内搜索 + 也不起作用)。
(+)
无论如何,我使用了 SQLDeveloper 的“解释计划”,我得到了一个输出HASH JOIN, RIGHT OUTER,等等。
HASH JOIN, RIGHT OUTER
(+)如果我在查询结束时删除运算符,会有什么不同吗?数据库是否必须满足某些条件(例如具有某些索引等)才能(+)使用?如果您能给我提供一个简单的理解,或者提供一些我可以阅读相关内容的好链接,那将非常有帮助。
谢谢!
这是 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语法:
FROM
OUTER JOIN