注意:我不是要你告诉我“使用明确的联接”,而是寻找甲骨文的官方职位,如果有的话.
From Oracle database documentation(也出现在9i和11g文件中):
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 […]
换句话说,甲骨文建议更喜欢这两种形式中的第一种:
FROM a LEFT JOIN b ON b.x = a.x vs FROM a,b WHERE b.x(+) = a.x
然而,我从来没有在任何Oracle文档中找到一个建议,最好使用这两种形式之一:
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外部联接的其他对()的限制是
documented here.
一位受人尊敬的Oracle专家实际上建议坚持使用内部联接的旧语法 – 参见Jonathan Lewis’s blog.他表示,ANSI连接将转换为传统的Oracle连接.我不同意他100%(我更喜欢ANSI加入我自己一般),但不会声称有一小部分他的知识的话题.
简而言之,ANSI外部连接在技术上优于old()连接,而内部连接更符合风格.