使用连接和从多表中选择是否有区别?

时间:2010-04-07 13:49:02

标签: sql

第一个选项:

SELECT Table1.* ,Table2.Price AS Price
FROM
  Table1,Table2
WHERE
  Table1.ID = Table2.ID 

第二个选项:

SELECT Table1.* ,Table2.Price AS Price
FROM 
  Table1 INNER JOIN Table2 ON Table1.ID = Table2.ID

哪一个更好,更有效?

5 个答案:

答案 0 :(得分:3)

它可能会给你相同的结果,但第二个选项更好,因为它遵循最新标准,并正确定义什么是连接和什么可能是where子句。在性能方面,上述两个陈述应该相同。

答案 1 :(得分:3)

第二种方式做同样的事情,只有ANSI(美国国家标准协会标准化结构化查询语言)SQL,一种标准形式的SQL。进一步研究它的优缺点。

http://it.toolbox.com/blogs/oracle-experience/a-case-for-ansi-sql-15647

答案 2 :(得分:1)

它们都是joins,第一个是使用隐式语法,第二个是使用显式语法。

答案 3 :(得分:0)

Tons of duplicate questions

此外,它应该包含在任何体面的SQL书中(我已经从O'Reilly口袋参考中了解了这个问题)。此外,我仍然想知道人们在哪里得到旧的语法示例,也许我只是从好的来源学习SQL。此外,虽然人们重申这两个变体生成具有相同性能的相同查询,但我仍然更倾向于怀疑当谈话不是关于某些DBMS特别声明在其文档中,特别是当谈论是关于DBMS时。

答案 4 :(得分:0)

第一个查询连接样式使用古老的连接语法,而第二个样式更新。在大多数情况下,它们会产生完全相同的查询执行计划。但是,当使用LEFT AND RIGHT OUTER JOINS时,您可以有问题,请参阅此答案和评论:

ANSI joins versus "where clause" joins

  

来自SQL Server BOL(2000)“在早期   Microsoft®SQLServer™的版本   2000左右外连接   条件在WHERE中指定   使用*==*的子句   运营商。在某些情况下,这种语法   导致一个模糊的查询,可以   不止一种解释。