Oracle join的订单

时间:2017-07-04 02:01:18

标签: sql oracle

我有一个sql句子。

select a.*,b.*,c.*
from a 
inner join b
on a.id=b.id
left join c 
on b.id=c.id

但我不知道它是先执行内连接。然后创建一个临时表,如temp。和finaly temp left join c。内连接,左连接和右连接是否具有相同的执行级别。谢谢!

1 个答案:

答案 0 :(得分:5)

SQL不是过程语言。 SQL查询描述了正在生成的结果集。解释查询时,连接顺序是从左到右。因此,在您的查询中,结果集是由a和b上的内部联接生成的结果集,其结果将保持连接到c。

您可以添加括号以避免歧义:

from (a inner join
      b
      on a.id = b.id
     ) left join
     c 
     on b.id = c.id

但这是不必要的。

逻辑上查询的处理方式。优化引擎可以选择执行查询的许多不同方式,其中一些可能与该特定查询相关时非常难以识别。唯一的保证是结果集的样子。