Nis*_*sar 3 sql oracle join inner-join
这两个代码之间有什么不同吗
select a.firstname,
a.lastname,
b.salary,
b.designation
from table a,
table b
where a.id = b.id
Run Code Online (Sandbox Code Playgroud)
和
select a.firstname,
a.lastname,
b.salary,
b.designation
from table a inner join table b on a.id = b.id
Run Code Online (Sandbox Code Playgroud)
从功能上来说,不,这些特定查询是相同的。第二种是使用 ANSI 连接语法,该语法自 SQL-92 以来一直是标准,并且自 9i 以来在 Oracle 中可用。尽管两者仍然有效,但在使用外连接时,有些事情您需要使用 ANSI 语法。
新样式通常是首选,部分原因是旧样式可能会通过省略连接条件意外地引入笛卡尔积 - 这是您无法使用join语法做到的(意外;cross join如果您真的想这样做,您仍然可以这样做目的),并且可以说它使您的加入/过滤意图更加清晰。许多人发现它更容易阅读,但这是一个观点问题,因此这个方面是偏离主题的。
Oracle 建议您使用 ANSI 连接,至少对于外连接而言。从计划和跟踪中可以看到,Oracle实际上仍然在内部将ANSI语法转换为其旧格式,因此只要您的查询是正确的(即没有丢失条件)那么就没有性能差异;并且优化器仍然可以选择使用基于where子句的索引,而不仅仅是on子句。
如果您是 Oracle 新手,这里的许多人会建议您从一开始就使用 ANSI 语法。当然,并不是所有人都同意。例如,这里提到了反对声音。
| 归档时间: |
|
| 查看次数: |
13040 次 |
| 最近记录: |