oracle 是否有替代内部联接的方法

t0ybt7op  于 2023-04-29  发布在  Oracle
关注(0)|答案(1)|浏览(123)

这两个密码有什么不同吗

select a.firstname,
       a.lastname,
       b.salary,
       b.designation
from table a,
     table b
where a.id = b.id

select a.firstname,
       a.lastname,
       b.salary,
       b.designation
from table a inner join table b on a.id = b.id
egdjgwm8

egdjgwm81#

在功能上,不,这些特定查询是相同的。第二种是使用ANSI连接语法,这是自SQL-92以来的标准,在Oracle since 9i中可用。虽然两者都可以工作,但在使用外部连接时,有些事情需要使用ANSI语法。
新样式通常是首选的,部分原因是旧样式可以通过省略连接条件而意外地引入笛卡尔积-这在join语法中是无法做到的(* 意外 *;如果你真的想这样做,你仍然可以做cross join),它可以说让你的连接/过滤意图更清晰。许多人觉得它更容易阅读,但这是一个意见问题,所以这方面是题外话。
Oracle建议您使用ANSI联接,至少对于外部联接是这样。您可以从计划和跟踪中看到,Oracle实际上仍然在内部将ANSI语法转换为旧格式,因此只要您的查询是正确的(即:即没有缺失条件),则没有性能差异;并且优化器仍然可以选择使用基于where子句的索引,而不仅仅是on子句。
这里的许多人建议您从一开始就使用ANSI语法,如果您是Oracle的新手。当然,并非所有人都同意;例如,有一个here的引用,表示反对的声音。

相关问题