2011-05-03 49 views

回答

0

他们很可能会进行优化,由RDBMS同样的事情。他们都JOINA.ID = B.ID标准的表。

但是,JOIN语法是明确的并被认为是正确的。

0

前者是ANSI-89语法,后者是ANSI-92语法。后者应该几乎总是被使用,因为当你用ANSI-92语法表示时开始使用外部连接时它会更清晰。

0

第一种语法是(如您所指出的)两个表的交叉连接或笛卡尔乘积。在没有优化器(或优化器不佳)的系统中,这将产生第一个表中每个记录与第二个表中每个记录的组合,然后将它们过滤为只匹配WHERE子句的那些记录。

这两个语句的输出都是一样的,如果你使用的系统有一个好的优化器,那么性能也是一样的。

两个意见,我会提供:

1)我觉得写的语句时,它最好是明确你的意图。如果您打算执行INNER JOIN,则使用INNER JOIN语法。未来你6个月的形式现在将感恩。

2)SQL Server中的优化器将在这种情况下执行一个INNER JOIN(至少是最近的版本,不能保证所有版本),但是它如何猜测该路径将取决于SQL的版本服务器引擎并不保证将来保持不变(我怀疑它会在这种情况下发生变化,但是键入的几个字符的成本真的很高?)

0

@ypercube正确地指出了你的问题是关于两种不同的INNER JOIN语法。您没有任何外部连接语法。正如@Matt Whitfield指出的那样,第一种语法是ANSI-92,第二种是ANSI-89样式。我完全同意,在更复杂的查询中,ANSI-92语法更具可读性。

此外,取决于您的SQL Server版本ANSI-89语法是DEPRECATED,可以给你的问题。请参阅SR0010: Avoid using deprecated syntax when you join tables or views事实上,在下一个版本的SQL 2011或Denali中,或者我们称之为的任何东西,ANSI-89语法都将不受支持。参见:Features Not Supported in the Next Version of SQL Server (搜索单词“join”)。