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