1
 SELECT * FROM dbo.table1, 
 dbo.table2 AS T2,
 dbo.table3 AS T3, 
 dbo.table4 AS T4
 WHERE dbo.table1.ID = T2.ID 
 AND T2.ID = T3.ID 
 AND T3.ID = T4.ID 

(或者)

SELECT 
* 
FROM dbo.table1 T1 
INNER JOIN dbo.table2 T2 ON T1.ID = T2.ID 
INNER JOIN dbo.table3 T3 ON T2.ID = T3.ID 
INNER JOIN dbo.table4 T4 ON T3.ID = T4.ID 
4

4 回答 4

2

两者都没有区别。最好远离“逗号连接”,因为 a) ANSI 连接语法更具表现力,无论如何你都会将它用于 LEFT JOIN,混合样式会带来麻烦,所以你可能也只使用一种风格;b) ANSI 风格更清晰。

于 2013-10-10T06:33:04.187 回答
0

在您上面提到的两种情况下,sql引擎在后台执行它们的方式不会有任何区别。影响性能的唯一因素是在连接的情况下连接列的索引以及在逗号分隔表名称的情况下的 where 子句的有效性。

所以只要确保你有正确的索引、更新的统计数据等

更重要的一件事是您正在使用选择“*”,如果可能,请尝试仅使用您感兴趣的列。

于 2013-10-10T06:52:56.557 回答
0

两者都是连接,第一个是隐式的,它将执行前面答案中指出的交叉连接,后一个是显式的内部连接概念。虽然它不应该在性能方面产生影响。

于 2013-10-10T06:55:06.993 回答
0

两者都需要相同的时间来执行,没有性能差异。

如果没有Join关键字,它的行为就像Cross Joins,产生的结果由来自两个或多个表的行的每个组合组成。这意味着如果表 table2 有 6 行,而表 table3 有 3 行,则交叉连接将产生 18 行。这两个表之间没有建立关系——你实际上只是产生了所有可能的组合。

使用内连接,表中一行的列值与另一个(或同一个)表的另一行中的列值组合在一起,形成单行数据。

如果将 WHERE 子句添加到交叉连接,则它的行为类似于内部连接,因为 WHERE 施加了限制因素。

于 2013-10-10T06:29:19.457 回答