INNER JOIN和WHERE之间的区别?

时间:2011-06-06 06:49:13

标签: tsql inner-join where

首先查询:

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

第二次查询:

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

这些关于应该使用的性能的查询之间有什么区别?

2 个答案:

答案 0 :(得分:13)

您发布的两个陈述在逻辑上是相同的。真的没有 实际的理由是偏爱一个而不是另一个,这在很大程度上是一个问题 个人风格和可读性。有些人更喜欢INNER JOIN语法和 有些人更喜欢使用WHERE

参考Using Inner Joins

  

在ISO标准中,内连接可以   在FROM或中指定   WHERE子句。这是唯一的类型   在WHERE中加入ISO支持   条款。在内部指定的内部联接   WHERE子句称为旧式   内连接。

参考Join Fundamentals

  

指定中的连接条件   FROM子句有助于将它们分开   可能的任何其他搜索条件   在WHERE子句中指定,并且是   建议的指定方法   联接。

Personaly,我更喜欢使用INNER JOIN。我发现它更加清晰,因为我可以将连接条件与过滤条件分开,并为每个连接表使用单独的连接块。

答案 1 :(得分:1)

为了放大@Akram的答案 - 很多人更喜欢inner join语法,因为它允许您更容易区分连接条件(FROM子句中的各个表如何相互关联)条件(应该用于减少整体结果集的那些条件。在这种情况下它们之间没有区别,但是对于更大的查询,如果有更多的表,它可能会提高使用inner join形式的可读性。

此外,一旦你开始考虑外连接,你很需要使用中缀连接语法(left outer joinright outer join),所以很多人在使用相同的样式时找到一种对称形式inner join。在WHERE子句中使用*=子句执行外连接有一个较旧的已弃用语法,但是对此类连接的支持正在消失。