SQL語句各子句的執行順序

2022-09-17 06:42:09 字數 1215 閱讀 1879

乙個sql會包含很多個子句,在寫sql時,理解sql個部分子句執行的優先順序非常重要,否則可能會導致簡單的sql變成多個巢狀的sql,更可能導致錯誤的返回結果。

下面通過乙個例子說明各子句的優先順序:

select a,b,count(sum(c)) over ()

from t

where t.d=1

start with e is not null connect by prior f=g

group by a,b

h**ing sum(c)>100

order by 3;

這個sql包含:

1. select 子句

2. group by子句

3. 分析函式

4. from子句

5. where子句

6. start with...connect by子句

7. h**ing子句

8. order by子句

對於from子句,可以簡單理解為表或者掃瞄掃瞄(如果涉及到多表關聯就複雜了,這裡不討論);

對於select子句,從執行計畫看是在最後執行的,我把它理解為返回資料給使用者,而不是讀取資料,讀取資料是在from這個步驟執行的,所以我認為順序是:

4 -> 6 -> 5 -> 2 -> 7 -> 3 -> 8 -> 1

from子句 -> start with...connect by子句 -> where子句 -> group by子句 -> h**ing子句 -> 分析函式 -> order by子句 -> select 子句

要注意,以上的順序只代表一般情況,不一定所有的情況都按照這個執行順序,尤其是同時有group by和order by時。例如:

select a,b,count(sum(c)) over ()

from t

where t.d=1

start with e is not null connect by prior f=g

group by a,b

h**ing sum(c)>100

order by a;

這個sql的執行順序就有可能是:4->6->5-> 2 + 8 ->7->3->1。實際執行順序以執行計畫為準,但是這裡特別要記住的是不管sql怎麼樣,以下部分的優先順序是確定的:

start with...connect by子句 -> where子句 -> group by子句 -> h**ing子句 -> 分析函式

SQl語句執行順序

在程式設計的時候,每個語言的一行 都是有執行順序,比如從右往左或者從左往右,在大部分的時候是不影響,但有些時候,執行順序卻有非常大的影響。int i 0 if i 0 i 0 if i 0 i 0 第一種情況會執行,第二種情況不會執行,因為判斷是從右往左判斷,條件不成立馬上就結束,第二種情況先判斷i...

SQL語句執行順序

1 from 子句,組裝來自不同資料來源的資料 2 where 子句,基於指定的條件對記錄進行篩選 3 group by 子句,將資料劃分為多個分組 4 使用聚合函式進行計算 5 使用 h ing 子句篩選分組 6 計算所有的表示式 7 使用 order by 對結果集進行排序 select dis...

SQL語句執行順序

from或join會第乙個執行,確定乙個整體的資料範圍.如果要join不同表,可能會生成乙個臨時table來用於 下面的過程。總之第一步可以簡單理解為確定乙個資料來源表 含臨時表 我們確定了資料 where語句就將在這個資料來源中按要求進行資料篩選,並丟棄不符合要求的資料行,所有的篩選col屬性 只...