29

我有两个选择加入 SQL 语句:

select a.id from table_a as a, table_b as b where a.id=b.id;
select a.id from table_a as a inner join table_b as b on a.id=b.id;

显然,它们的结果是相同的。但是它们之间是否有任何区别,例如性能,便携性。

4

4 回答 4

30

一个区别是第一个选项通过在 where 子句中表达连接条件来隐藏意图。

对于阅读查询的用户来说,写出连接条件的第二个选项更清楚。它显示了查询的确切意图。

至于性能或任何其他差异,不应该有任何差异。在大多数 RDBMS 下,这两个查询都应该返回完全相同的结果并执行相同的操作。

于 2012-07-18T03:35:34.313 回答
3

内连接语法在 1990 年代的某个时候被添加到 SQL 中。与使用 where 子句作为连接条件的旧语法相比,优化器有可能(但不太可能)做得更好。

它们都应该像现在一样高度便携。

内连接语法更可取,因为它对读者来说更容易,正如其他人已经指出的那样。

于 2012-07-18T04:18:18.097 回答
0

两者都是标准 SQL。不同的数据库系统可能会以不同的方式优化它们,但因为它们非常简单,如果它们这样做我会有点惊讶。但这就是 SQL 的本质:它是声明性的,这为实现在如何执行查询方面提供了很大的余地。不能保证这些执行相同,或者如果它们不同,则更快。

于 2012-07-18T03:35:16.837 回答
0

它们在 SQL Server 中完全相同。没有性能差异。

于 2012-07-18T03:35:53.167 回答