2013-01-23 57 views
6

加入表格之间哪个更好从多个表格中选择加入表格或从多个表格中选择

例如,让我们假设以下类似的情况:

使用加入

SELECT COALESCE(SUM(SALARY),0) FROM X 
JOIN Y ON X.X_ID=Y.Y_X_ID 

OR

通过选择从多个表

SELECT COALESCE(SUM(SALARY),0) FROM X, Y 
WHERE X.X_ID=Y.Y_X_ID 
+7

他们是一样的东西。查看执行计划。第二个也是一个连接(是Oracle syle join)。但是,您应该使用更明确且全球使用的第一种样式。 –

+4

说到ANSI和兼容性,试着摆脱使用Nvl()的习惯。 Coalesce()是标准功能,由于短路评估,它更灵活,并且某些情况下的性能优于Nvl() –

+0

谢谢大家的建议。 – hsuk

回答

1

您应该使用JOIN语法有很多原因可以发现here。此外,这种语法的优点在于给查询优化器提供了一些提示(在权重的计算过程中,通过在这个语法中提到的事实直接计算出的权重比其他的更有利地加权)。

1

两者都是连接。第一个是显式连接,第二个是隐式连接,是SQL反模式。

第二个是坏的,因为它是很容易得到一个意外的交叉连接。这也是糟糕的,因为当你想交叉加入时,不清楚你是否想要这样做,或者如果你有意外的加入。

而且如果您定义转换为外部联接第二风格,您需要更改查询或风险得到不正确的结果所有联接。所以第二种风格很难维护。

Explcit联接在上个世纪,为什么有人仍然采用容易出错,难以维持隐含联接是超越我了institututed。

2

主要加入用于检索从多个表 数据,以便在SQL有3种类型的连接是可用

  1. EQUI加入内连接 外连接左 右 充分
  2. 非等距加入
  3. 自加入
  4. CROSS JOIN
相关问题