SQL INNER JOIN question

5

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

我已经改变了查询,使用了INNER JOIN。我想知道我的方法是否比使用WHERE操作符的组合更好。

在良好实践的度量标准上,INNER JOIN的组合是一个好选择,还是应该采用不同的技术。

3个回答

3

从性能角度来看,在主流的关系型数据库(如Sql-server/Oracle)上,两种查询方式并没有什么区别... 这些数据库引擎能够识别这两种模式,并使用相同的执行计划...

在我看来,这两种查询方式都是同样好的实践,但你应该保持一致性和适当的对齐... 我听说过Oracle开发人员通常使用Where子句而Sql-Server则使用内部连接,但不确定是否完全正确... 现在大多数程序员都能理解这两种查询类型...


我使用MySQL,通常更喜欢使用INNER JOIN,因为代码看起来更清晰,似乎更容易理解。我正确地认为当两个表中都有记录时应该使用Inner Join吗? - user275074
是的...内连接只会获取那些在子表中有匹配记录的记录...如果在子表中没有匹配记录,那么该行将从查询结果中排除。 - The King
我想知道你能否帮我解决正在进行的查询?它返回了比我预期的记录要多得多。 - user275074
1
我不介意...请编辑您的问题并附上表格规格... - The King

1

我相信这两种写法之间没有性能差异:

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


0

两者的行为都是相同的(正如国王所说)。个人而言,我更喜欢INNER/OUTER/LEFT JOIN语法,因为它更直观/明确。当你使用带有连接条件的LEFT JOIN并将其放在WHERE子句中时,你必须开始使用加号,然后你必须记住将它们放在哪一侧。真是让人头疼。

似乎(再次像国王所说的那样),Oracle开发人员更喜欢将连接条件放入WHERE子句中。

-Jamiet


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接