我有一个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。内连接,左连接和右连接是否具有相同的执行级别。谢谢!
答案 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
但这是不必要的。
逻辑上查询的处理方式。优化引擎可以选择执行查询的许多不同方式,其中一些可能与该特定查询相关时非常难以识别。唯一的保证是结果集的样子。