我有两个选择连接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;
显然,结果是一样的。但它们之间是否存在差异,例如性能,可移植性。
答案 0 :(得分:21)
一个区别是第一个选项通过在where子句中表达连接条件来隐藏意图。
读取连接条件的第二个选项对于读取查询的用户更清楚。它显示了查询的确切意图。
就表现或任何其他差异而言,不应该有任何。两个查询都应返回完全相同的结果,并在大多数RDBMS下执行相同的操作。
答案 1 :(得分:3)
内部联接语法在20世纪90年代的某个时候被添加到SQL中。有可能(但不太可能)优化器可以用它做得比使用where子句用于连接条件的旧语法更好。
它们应该像现在一样具有高度的便携性。
内部联接语法更可取,因为它更容易读者,正如其他人已经注意到的那样。
答案 2 :(得分:0)
两者都是标准SQL。不同的数据库系统可能会以不同的方式对它们进行优化,但由于它们非常简单,如果有的话,我会感到有些惊讶。但这就是SQL的本质:它是声明性的,这使得实现在如何执行查询方面有很大的余地。不能保证这些表现相同,或者如果它们不同,则更快。
答案 3 :(得分:0)
它们在SQL服务器中完全相同。没有性能差异。