SQL INNER JOIN 问题

Posted

技术标签:

【中文标题】SQL INNER JOIN 问题【英文标题】:SQL INNER JOIN question 【发布时间】:2011-03-25 16:13:31 【问题描述】:

我正在创建一个查询,它将显示来自 8 个表的记录的信息。最初编写查询的开发人员使用“where this equals this”和“this equals this”的组合来创建连接。

我已将查询更改为使用 INNER JOINS。我想知道我的方法是否比使用 WHERE 运算符的组合更好。

根据良好实践的衡量标准,INNER JOINS 的组合是一个不错的选择,还是我应该采用不同的技术。

【问题讨论】:

【参考方案1】:

从性能的角度来看,不会有任何区别......至少在像 Sql-server / Oracle 这样的突出 RDBMS 上没有......这些数据库引擎能够识别两种模式意味着相同并使用相同两者的执行计划......

以我的拙见,两者都是同样好的做法,但你应该保持一致性和适当的对齐......在某个地方我听说 where 子句通常由 oracle 开发人员使用,而内部连接由 Sql-Server... 不是很多确定...到目前为止,大多数编码人员都能够理解这两种类型的查询...

【讨论】:

我使用 mysql 并且通常更喜欢 INNER JOIN 简单,因为 i.代码看起来更干净,也更容易理解。我认为当两个表中都有记录时使用内部联接是正确的。 是...内部联接将仅获取在子表中具有匹配记录的那些记录...如果子表中没有匹配记录,则该特定行将从查询结果中排除。 我想知道您是否可以帮助我解决我正在做的查询?它返回的记录超出了我的预期。 我不介意...请编辑您的问题并将您的查询连同表格规格一起发布...【参考方案2】:

两者的行为相同(如国王所说)。我个人更喜欢 INNER/OUTER/LEFT JOIN 语法,因为它更直观/明确。当您在 WHERE 子句中使用连接条件进入 LEFT JOIN 时,您必须开始使用加号,然后您必须记住将它们放在哪一边。呃。

Oracle 开发人员似乎也倾向于将连接条件放入 WHERE 子句中(再次如国王所说)。

-杰米特

【讨论】:

【参考方案3】:

我相信两者之间没有性能差异:

ANSI 样式SELECT * FROM Table1 a JOIN TABLE2 b on a.id = b.id

旧式SELECT * FROM Table1 a , TABLE2 b WHERE a.id = b.id

ANSI 样式更新,更易读,更漂亮,我更喜欢旧样式,尤其是在加入超过 4/5 个表时...可能是因为我是一个 Oracle 开发人员,正如之前所说的 o_O

【讨论】:

以上是关于SQL INNER JOIN 问题的主要内容,如果未能解决你的问题,请参考以下文章

关于SQL 查询效率问题 left join 改成 inner join union

JPQL 的 INNER JOIN 问题(即使 SQL 请求正在运行)

sql用inner join内关联查询有多条记录一样只取一条?

多个INNER JOIN子查询sql

SQL Server - INNER JOIN WITH DISTINCT

SQL 如何通过 INNER JOIN 更新 -