显式内连接和隐式内连接在效率上有区别吗? 例如:
SELECT * FROM
table a INNER JOIN table b
ON a.id = b.id;
vs.
SELECT a.*, b.*
FROM table a, table b
WHERE a.id = b.id;
显式内连接和隐式内连接在效率上有区别吗? 例如:
SELECT * FROM
table a INNER JOIN table b
ON a.id = b.id;
vs.
SELECT a.*, b.*
FROM table a, table b
WHERE a.id = b.id;
当前回答
在性能方面,它们是完全相同的(至少在SQL Server中)。
PS:请注意,自SQL Server 2005以来,隐式OUTER JOIN语法已弃用。(仍然支持问题中使用的隐式INNER JOIN语法)
“旧样式”JOIN语法的弃用:只是部分内容
其他回答
第二种语法具有不必要的交叉连接的可能性:您可以向FROM部分添加表而不对应WHERE子句。这被认为是有害的。
在性能方面,它们是完全相同的(至少在SQL Server中)。
PS:请注意,自SQL Server 2005以来,隐式OUTER JOIN语法已弃用。(仍然支持问题中使用的隐式INNER JOIN语法)
“旧样式”JOIN语法的弃用:只是部分内容
就我个人而言,我更喜欢join语法,因为它更清楚地表明表是连接的以及它们是如何连接的。尝试比较更大的SQL查询,其中您从8个不同的表中选择,并且在where中有很多过滤。通过使用联接语法,可以分离出连接表的部分和过滤行的部分。
正如Leigh Caldwell所述,查询优化器可以根据功能上类似于相同SQL语句的内容生成不同的查询计划。欲进一步阅读,请参阅以下两篇博客文章:-
一篇来自Oracle优化团队的帖子
另一篇来自“结构化数据”博客的文章
我希望你会觉得这很有趣。
@lomaxx:澄清一下,我非常确定SQL Serv 2005支持上述两种语法。但是不支持下面的语法
select a.*, b.*
from table a, table b
where a.id *= b.id;
具体来说,不支持外部连接(*=)。