我正在检查一些旧的 SQL 语句,以便记录它们并可能增强它们。
DBMS 是 Oracle。
我不明白这样的说法:
select ...
from a,b
where a.id=b.id(+)
我很困惑(+)
运算符,并且无法在任何论坛上获取它...(在引号内搜索 + 也不起作用)。
无论如何,我使用了 SQLDeveloper 的“解释计划”,并且得到了一个输出:HASH JOIN, RIGHT OUTER
, etc.
如果我删除的话会有什么不同吗(+)
查询末尾的运算符?数据库之前是否必须满足某些条件(例如有一些索引等)(+)
可以用吗?
这是 OUTER JOIN 的 Oracle 特定表示法,因为 ANSI-89 格式(在 FROM 子句中使用逗号来分隔表引用)没有标准化 OUTER JOIN。
该查询将以 ANSI-92 语法重写为:
SELECT ...
FROM a
LEFT JOIN b ON b.id = a.id
这个链接很好地解释了 JOIN 之间的区别 http://www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html.
还应该指出的是,尽管(+)
works, 甲骨文推荐not使用它 https://docs.oracle.com/database/121/SQLRF/queries006.htm#SQLRF52354:
Oracle 建议您使用FROM
clause OUTER JOIN
语法而不是 Oracle 连接运算符。使用 Oracle 连接运算符的外连接查询(+)
受以下规则和限制的约束,这些规则和限制不适用于FROM
clause OUTER JOIN
syntax:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)