选择连接SQL语句中的内连接和where之间的区别[重复]

Posted

技术标签:

【中文标题】选择连接SQL语句中的内连接和where之间的区别[重复]【英文标题】:Difference between inner join and where in select join SQL statement [duplicate] 【发布时间】:2012-07-17 01:07:32 【问题描述】:

我有两个 select join 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;

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

【问题讨论】:

从您的问题中不清楚您是否将 SQL 称为在许多数据库系统中实现的语言,或者 SQL Server,即 Microsoft 产品。 适用于大多数 DBRMS,例如 mysql、SQL Server、Oracle、DB2 【参考方案1】:

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

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

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

【讨论】:

【参考方案2】:

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

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

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

【讨论】:

【参考方案3】:

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

【讨论】:

【参考方案4】:

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

【讨论】:

你说不能保证这些都是一样的。能举个例子吗? 对不起,我的意思是,“不保证这些性能相同,”我已经修正了我的答案。

以上是关于选择连接SQL语句中的内连接和where之间的区别[重复]的主要内容,如果未能解决你的问题,请参考以下文章

sql中的内连接和外连接

关于SqlServer的内连接,外链接以及left join,right join之间的一些问题与区别。

SQL语句中两个表的连接

左连接条件与where条件的区别

sql server 2005 中的内连接和外连接 怎么理解?

简述SELECT语句中的FROM、WHERE以及ORDER BY子句的作用。SQL Server