INNER JOIN和WHERE的区别是什么?

6

第一个查询:

Select * from table1 inner join table2 on table1.Id = table2.Id

第二个查询:

Select * from table1, table2 where table1.Id = table2.Id

这些查询在性能方面有何区别?应该使用哪一个?

3
就优化器而言,没有区别。优化器将为您的两个查询选择相同的执行计划。个人而言,我更喜欢使用“内连接”语法。 - Lieven Keersmaekers
2个回答

13
你发布的这两条语句在逻辑上是相同的。没有一个实际的理由去偏好其中一种,这主要是个人风格和可读性的问题。有些人喜欢使用INNER JOIN语法,而有些人则喜欢只使用WHERE语句。
参考使用内部联接
在ISO标准中,内部连接可以在FROM或WHERE子句中指定。这是ISO在WHERE子句中支持的唯一类型连接。在WHERE子句中指定的内部连接被称为旧式内部连接。
参考连接基础知识
在FROM子句中指定联接条件有助于将其与可能在WHERE子句中指定的其他搜索条件分开,并且是指定联接的推荐方法。
个人而言,我更喜欢使用INNER JOIN。我发现它更加清晰,因为我可以将联接条件与过滤条件分开,并针对每个联接表使用单独的联接块。

1
+1 倾向于使用内连接的语法。我发现它更合理,因为它明确说明了你要做什么。 - David Steele

1

为了补充@Akram的回答 - 许多人更喜欢使用inner join语法,因为它可以更容易地区分连接条件(FROM子句中各个表之间的关系)和过滤条件(应用于减少整个结果集的条件)。在这种情况下它们之间没有区别,但是在更大的查询中,使用inner join形式可能会提高可读性。

此外,一旦您开始考虑外部连接,您就需要使用中缀连接语法(left outer joinright outer join),因此许多人发现使用相同风格的inner join具有对称性。在WHERE子句中执行外部连接的旧的不推荐使用的语法(使用*=)正在逐渐淘汰。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接