2017-07-04 88 views
0

我有一個sql語句。Oracle加入的訂單

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

,但我不konw它執行內部聯接第一。然後創建一個臨時表,如溫度。而finaly臨時離開加盟℃。內連接,左連接和右連接都具有相同的執行級別,謝謝!

+0

爲什麼不嘗試在一些樣本數據上運行它,並查看結果是什麼? – OldProgrammer

+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 

但是,這是不必要的。

那就是邏輯上查詢是如何處理的。優化引擎可以選擇許多不同的執行查詢的方式,其中一些可能與這個特定的查詢有關是非常不可識別的。唯一的保證是結果集的外觀。

+0

我明白了。非常感謝! –