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

问题描述:

第一种选择:使用多表中的连接和选择是否有区别?

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 

哪一个更好,最有效的?

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

第二种方式是做同样的事情,只有ANSI(美国国家标准学会标准化结构化查询语言)标准SQL形式的SQL。进一步研究以找出其利弊。

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

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

Tons of duplicate questions

此外,应该在任何像样的SQL本书覆盖(我有我从O'Reilly的袖珍参考这一问题的理解)。另外,我还想知道人们在哪里获得旧的语法示例,也许我只是从良好的来源学习了SQL。另外,尽管人们重复说这两个变体产生的查询具有相同的性能,但我仍然倾向于怀疑当谈话不是针对某些DBMS特别指出在其文档中,特别是谈论DBMS时。

第一个查询连接样式使用古代连接语法,而第二个样式更加当前。在大多数情况下,它们会导致完全相同的查询执行计划。然而,当使用左和右外连接,你可以有probelms,看到这个答案和注释:

ANSI joins versus "where clause" joins

从SQL Server BOL(2000)“在早期版本的 微软的SQL Server™的 2000左,右外连接 条件使用*==* 运营商WHERE 子句中指定。在某些情况下,这句法 结果,可以 在一个以上的方式来解释一个模糊查询。