Is there an Oracle official recommendation on the use of explicit ANSI JOINs vs implicit joins?(是否有关于使用显式 ANSI JOIN 与隐式连接的 Oracle 官方建议?)
问题描述
注意:我不是要您告诉我使用显式连接",而是要查找 Oracle 官方在该主题上的立场(如果有).
来自 Oracle 数据库文档(也出现在 9i 和 11g 文档中):
From Oracle database documentation (also appears in 9i and 11g documentations):
Oracle 建议您使用 FROM
子句 OUTER JOIN
语法而不是 Oracle 连接运算符.使用Oracle 连接运算符 (+)
受以下规则约束,并且限制 […]
Oracle recommends that you use the
FROM
clauseOUTER JOIN
syntax rather than the Oracle join operator. Outer join queries that use the Oracle join operator(+)
are subject to the following rules and restrictions […]
换句话说,Oracle 建议首选这两种形式中的第一种:
In other words, Oracle advises to prefer the first of these two forms:
FROM a LEFT JOIN b ON b.x = a.x
vs
FROM a, b WHERE b.x(+) = a.x
但是,我从未在任何 Oracle 文档中找到建议最好使用这两种形式之一:
However, I have never found in any Oracle documentation a single recommendation to use preferably one of those two forms:
FROM a INNER JOIN b ON b.x = a.x
vs
FROM a, b WHERE b.x = a.x
有没有我漏掉的段落?
推荐答案
我还没看过,如果有的话.尤其喜欢将 ANSI 语法用于外连接的原因(除了非标准的、特定于 Oracle 的 (+)
符号)是使用 ANSI 语法可以表达更多的外连接.限制ORA-01417:一个表最多可以外部连接到另一个表"适用于 (+)
外部连接,但不适用于 ANSI 外部连接.(+)
上不适用于 ANSI 外连接的其他限制是 此处记录.
I haven't seen it if there is. The reason for preferring ANSI syntax for outer joins in particular (apart from the non-standarrd, Oracle-specific (+)
symbol) is that more outer joins are expressible using the ANSI syntax. The restriction "ORA-01417: a table may be outer joined to at most one other table" applies to (+)
outer joins but not to ANSI outer joins. Other restrictions on (+)
that do not apply to ANSI outer joins are documented here.
一位备受尊敬的 Oracle 专家实际上建议坚持使用旧语法进行内部联接 - 请参阅 乔纳森刘易斯的博客.他在那里说 ANSI 连接在幕后转换为传统的 Oracle 连接.我不 100% 同意他的观点(我一般更喜欢 ANSI 加入我自己),但不会声称他对该主题的了解只有一小部分.
One highly respected Oracle expert actually recommends sticking to the old syntax for inner joins - see Jonathan Lewis's blog. He says there that ANSI joins are transformed to traditional Oracle joins under the covers anyway. I don't agree with him 100% (I prefer ANSI joins myself in general), but would not claim to have a fraction of his knowledge on the topic.
简而言之,ANSI 外连接在技术上优于旧的 (+)
连接,而内连接更多地只是风格问题.
In a nutshell, ANSI outer joins are technically superior to old (+)
joins, whereas with inner joins it is more just a matter of style.
这篇关于是否有关于使用显式 ANSI JOIN 与隐式连接的 Oracle 官方建议?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:是否有关于使用显式 ANSI JOIN 与隐式连接的 Oracle 官方建议?
基础教程推荐
- SQL Server 中单行 MERGE/upsert 的语法 2021-01-01
- SQL Server:只有 GROUP BY 中的最后一个条目 2021-01-01
- ERROR 2006 (HY000): MySQL 服务器已经消失 2021-01-01
- 在 VB.NET 中更新 SQL Server DateTime 列 2021-01-01
- 如何在 SQL Server 的嵌套过程中处理事务? 2021-01-01
- Sql Server 字符串到日期的转换 2021-01-01
- SQL Server 2016更改对象所有者 2022-01-01
- 使用pyodbc“不安全"的Python多处理和数据库访问? 2022-01-01
- 无法在 ubuntu 中启动 mysql 服务器 2021-01-01
- 将数据从 MS SQL 迁移到 PostgreSQL? 2022-01-01