INNER JOIN 和 WHERE 之间的区别?

Posted

技术标签:

【中文标题】INNER JOIN 和 WHERE 之间的区别?【英文标题】:Difference between INNER JOIN and WHERE? 【发布时间】:2011-09-09 01:41:12 【问题描述】:

第一次查询:

Select * from table1 inner join table2 on table1.Id = table2.Id

第二次查询:

Select * from table1, table2 where table1.Id = table2.Id

这些查询在性能方面有什么区别?

【问题讨论】:

就优化器而言,没有区别。优化器将为您的两个查询选择相同的计划。就个人而言,我更喜欢inner join 语法。 【参考方案1】:

您发布的两个语句在逻辑上是相同的。真的没有 实际的理由更喜欢一个而不是另一个,这在很大程度上是一个问题 个人风格和可读性。有些人更喜欢INNER JOIN 语法和 有些人更喜欢只使用WHERE。

参考Using Inner Joins:

在 ISO 标准中,内连接可以 可以在 FROM 或 WHERE 子句。这是唯一的类型 加入 ISO 支持的 WHERE 条款。中指定的内连接 WHERE 子句被称为旧式 内部连接。

参考Join Fundamentals:

在 FROM 子句有助于将它们与 任何其他可能的搜索条件 在 WHERE 子句中指定,并且是 推荐的指定方法 加入。

就个人而言,我更喜欢使用INNER JOIN。我发现它更清晰,因为我可以将连接条件与过滤条件分开,并为每个连接表使用单独的连接块。

【讨论】:

+1 表示首选内连接语法。我觉得它更合理,因为它明确说明了您要做什么。【参考方案2】:

为了放大@Akram 的答案 - 许多人更喜欢inner join 语法,因为它可以让您更轻松地区分连接条件(FROM 子句中的各个表如何相互关联)和过滤条件(那些应该用来减少整体结果集的条件。在这种情况下它们之间没有区别,但是在更大的查询,有更多的表时,使用inner join 表单可能会提高可读性。

此外,一旦您开始考虑外连接,您就需要使用中缀连接语法 (left outer join,right outer join),因此许多人在使用 inner join 的相同样式时发现了一种对称形式。在 WHERE 子句(使用 *=)中执行外部联接有一个旧的已弃用语法,但对此类联接的支持正在消失。

【讨论】:

以上是关于INNER JOIN 和 WHERE 之间的区别?的主要内容,如果未能解决你的问题,请参考以下文章

Oracle中Inner join和Where的区别

SQL中left join on 、right join on、inner join on之间的区别

SQL: LEFT JOIN , RIGHT JOIN , INNER JOIN 区别 , on 和 where条件的区别

sql语句中left join和inner join中的on与where的区别分析

ql语句中left join和inner join中的on与where的区别分析

SQL left joinright join和inner join的区别以及where的搭配使用