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 之间的区别?的主要内容,如果未能解决你的问题,请参考以下文章
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的区别分析