这两个SQL Server查询有什么区别?

时间:2012-08-08 15:14:28

标签: sql sql-server-2008

  

可能重复:
  Explicit vs implicit SQL joins

我在SQL Server中有两个查询。

首先查询:

Select * 
From Stack, Overflow
Where Stack.Id = Overflow.StackId

第二次查询:

Select * 
From Stack 
Inner Join Overflow On Overflow.StackId = Stack.Id

这两个查询返回相同的结果。

那么这两个查询在性能方面有什么区别?

你更喜欢哪一个?

2 个答案:

答案 0 :(得分:3)

使用查询#2 - 它是正确的 ANSI / ISO SQL标准 JOIN语法,优于#1。

对于一个:你的JOIN条件是它所属的地方 - 在JOIN - 并且不会使你的WHERE条款混乱。您的WHERE子句应仅包含实际用于约束结果集的内容。

其次:既然你必须在JOIN上定义你的JOIN条件,你就不太可能“忘记”它并且不太可能产生笛卡尔积。

最后:既然您定义了INNER JOINLEFT OUTER JOIN,那么您的查询就会变得更易读和更容易 - 对于查看您查询的其他人来说,以及在您必须离开的六个月内为您自己返回并维护您的代码。

答案 1 :(得分:2)

区别在于第一个查询隐式连接两个表,其中第二个显式连接两个表。

我更喜欢第二个,只是因为你明确指出两个表是如何连接在一起的,所以 verbose 是明确的。我想你也是第一个,但随着查询的增长,阅读起来会更加困难。

性能主要取决于您的表索引。