我正在创建一个查询,该查询将显示从8个表中派生的记录的信息。最初编写查询的开发人员使用了“where this equals this”和“this equals this”的组合来创建连接。
我已经改变了查询,使用了INNER JOIN。我想知道我的方法是否比使用WHERE操作符的组合更好。
在良好实践的度量标准上,INNER JOIN的组合是一个好选择,还是应该采用不同的技术。
我正在创建一个查询,该查询将显示从8个表中派生的记录的信息。最初编写查询的开发人员使用了“where this equals this”和“this equals this”的组合来创建连接。
我已经改变了查询,使用了INNER JOIN。我想知道我的方法是否比使用WHERE操作符的组合更好。
在良好实践的度量标准上,INNER JOIN的组合是一个好选择,还是应该采用不同的技术。
从性能角度来看,在主流的关系型数据库(如Sql-server/Oracle)上,两种查询方式并没有什么区别... 这些数据库引擎能够识别这两种模式,并使用相同的执行计划...
在我看来,这两种查询方式都是同样好的实践,但你应该保持一致性和适当的对齐... 我听说过Oracle开发人员通常使用Where子句而Sql-Server则使用内部连接,但不确定是否完全正确... 现在大多数程序员都能理解这两种查询类型...
我相信这两种写法之间没有性能差异:
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
两者的行为都是相同的(正如国王所说)。个人而言,我更喜欢INNER/OUTER/LEFT JOIN语法,因为它更直观/明确。当你使用带有连接条件的LEFT JOIN并将其放在WHERE子句中时,你必须开始使用加号,然后你必须记住将它们放在哪一侧。真是让人头疼。
似乎(再次像国王所说的那样),Oracle开发人员更喜欢将连接条件放入WHERE子句中。
-Jamiet