下面的 2 个查询执行相同的操作,但想知道哪个是最快和最可取的?
NUM 是 table1 和 table2 上的主键...
select *
from table1 tb1,
table2 tb2
where tb1.num = tb2.num
select *
from table1 tb1
inner join
table2 tb2
on tb1.num = tb2.num
下面的 2 个查询执行相同的操作,但想知道哪个是最快和最可取的?
NUM 是 table1 和 table2 上的主键...
select *
from table1 tb1,
table2 tb2
where tb1.num = tb2.num
select *
from table1 tb1
inner join
table2 tb2
on tb1.num = tb2.num
它们是同一个查询。第一个是较旧的替代语法,但它们都意味着进行内部连接。
您应该避免使用较旧的语法。这不仅仅是可读性,而且当您构建更复杂的查询时,有些事情您根本无法使用旧语法来完成。此外,旧语法正在经历一个缓慢的逐步淘汰过程,等效的外连接语法在大多数产品中被标记为已弃用,而 iirc 已经在至少一个产品中被删除。
这 2 个 SQL 语句是等效的。你可以查看执行计划来确认。通常,给定 2 个 SQL 语句以相同的方式影响/返回相同的行,服务器可以自由地以相同的方式执行它们。
它们是等效的查询 - 都是内部联接,但第一个使用较旧的隐式联接语法。您的数据库应该以完全相同的方式执行它们。
如果您不确定,可以随时使用 SQL Management Studio查看和比较两个查询的执行计划。
第一个示例是我所看到的称为Oracle Join的示例。如前所述,性能差异似乎很小。从可读性的角度来看,我更喜欢第二个示例,因为它将连接条件与过滤条件分开。