(在oracle中)在性能上有区别吗

Select * from Table1 T1 
Inner Join Table2 T2 On T1.ID = T2.ID

And

Select * from Table1 T1, Table2 T2 
Where T1.ID = T2.ID

?


当前回答

它们在逻辑上是相同的,但是在采用ANSI语法的Oracle早期版本中,在更复杂的情况下经常会出现错误,所以在使用它时有时会遇到来自Oracle开发人员的阻力。

其他回答

它们应该完全一样。然而,作为一种编码实践,我宁愿看到Join。它清楚地表达了你的意图,

在表采用第三范式的场景中,表之间的连接不应该改变。即加入客户和付款应始终保持不变。

但是,我们应该将连接与过滤器区分开来。联接是关于关系的,而过滤器是关于划分整体的。

一些作者,参考标准(即吉姆梅尔顿;艾伦·r·西蒙(1993)。理解新的SQL:完整指南。摩根考夫曼。11 - 12页。ISBN 978-1-55860-245-8.)写了在FROM子句中采用JOIN语法而不是逗号分隔表的好处。

我完全同意这个观点。

有几种方法可以编写SQL并达到相同的结果,但对于许多进行团队工作的人来说,源代码的可读性是一个重要方面,当然,从澄清源代码的意义上讲,将表之间的关系从特定的过滤器中分离出来是一个巨大的飞跃。

它们都是连接,做同样的事情。

在MySQL查询中,为什么使用join而不是where?

我不了解Oracle,但我知道旧的语法在SQL Server中被弃用了,最终会消失。在我在新的查询中使用旧语法之前,我会检查Oracle计划用它做什么。

我更喜欢更新的语法,而不是将连接标准与其他所需的where条件混合在一起。在新的语法中,创建连接的内容和应用的其他条件更加清晰。在这样的短查询中并不是一个大问题,但是当您有一个更复杂的查询时,它会变得更加混乱。由于人们学习基本的查询,我倾向于让人们在复杂查询中使用连接语法之前先学习使用它。

再次,我不知道Oracle,但我知道SQL Server版本的旧风格左连接是有缺陷的,甚至在SQL Server 2000,并给出不一致的结果(有时左连接有时交叉连接),所以它不应该被使用。希望Oracle不会遇到同样的问题,但可以肯定的是,左右连接在旧语法中很难正确表达。

另外,根据我的经验(当然,这完全是个人观点,你可能有不同的经验),使用ansi标准连接的开发人员倾向于更好地理解连接是什么以及它在从数据库中获取数据方面的意义。我相信这是因为大多数对数据库有良好理解的人倾向于编写更复杂的查询,而在我看来,使用ANSII标准比旧风格更容易维护。

不要忘记在Oracle中,如果连接键属性在两个表中命名相同,你也可以这样写:

select *
from Table1 inner join Table2 using (ID);

当然,这也有相同的查询计划。