SQL語句各子句的執行順序
一個SQL會包含很多個子句,在寫SQL時,理解SQL個部分子句執行的優先順序非常重要,否則可能會導致簡單的SQL變成多個巢狀的SQL,更可能導致錯誤的返回結果。
下面透過一個例子說明各子句的優先順序:
from t
where t.d=1
start with e is not null connect by prior f=g
group by a,b
having sum(c)>100
order by 3;
這個SQL包含:
1. SELECT 子句
2. group by子句
3. 分析函式
4. from子句
5. where子句
6. start with...connect by子句
7. having子句
8. order by子句
對於FROM子句,可以簡單理解為表或者掃描掃描(如果涉及到多表關聯就複雜了,這裡不討論);
對於SELECT子句,從執行計劃看是在最後執行的,我把它理解為返回資料給使用者,而不是讀取資料,讀取資料是在FROM這個步驟執行的,所以我認為順序是:
4 -> 6 -> 5 -> 2 -> 7 -> 3 -> 8 -> 1
from子句 -> start with...connect by子句 -> where子句 -> group by子句 -> having子句 -> 分析函式 -> 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
having sum(c)>100
order by a;
這個SQL的執行順序就有可能是:4->6->5-> 2 + 8 ->7->3->1。實際執行順序以執行計劃為準,但是這裡特別要記住的是不管SQL怎麼樣,以下部分的優先順序是確定的:
start with...connect by子句 -> where子句 -> group by子句 -> having子句 -> 分析函式
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/231499/viewspace-1040087/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- SQL語句執行順序SQL
- SQL 語句的執行順序SQL
- SQL Server SQL語句執行順序SQLServer
- SQL語句中SELECT語句的執行順序SQL
- for語句執行順序
- SQL 查詢語句的執行順序解析SQL
- Hive SQL語句的正確執行順序HiveSQL
- mySQL 執行語句執行順序MySql
- T-sql語句查詢執行順序SQL
- SQL Select語句邏輯執行順序SQL
- mysql 中sql語句關鍵字的書寫順序與執行順序MySql
- sql語句執行順序與效能優化(1)SQL優化
- SQL Server中SELECT語句執行順序解析SQLServer
- Select語句執行順序
- 一個 MySQL sql 語句執行順序帶來的 bugMySql
- Oracle SQL語句執行流程與順序原理解析OracleSQL
- SQL語句執行順序及建議--歸納整理SQL
- Java for迴圈中語句執行的順序Java
- sql select語法執行順序SQL
- Sql執行順序SQL
- SQL語句中的AND和OR執行順序問題SQL
- 【實驗】where子句的解析順序及執行效率
- JavaScript for迴圈語句的執行順序和優化JavaScript優化
- Oracle中where子句中條件的物理執行順序Oracle
- SQL 執行順序 你懂的SQL
- sql mysql 執行順序 (4)MySql
- for語句括號中程式碼執行順序介紹
- SELECT語句邏輯執行順序 你知道嗎?
- MySQL 查詢常用操作(0) —— 查詢語句的執行順序MySql
- 一個針對 Python 語句執行順序的練習Python
- ORACLE中sql語句----運算子的優先順序OracleSQL
- PLSQL Language Referenc-PL/SQL控制語句-順序控制語句-NULLSQLNull
- 可看執行順序的xplan.package.sqlPackageSQL
- sql語句如何執行的SQL
- 執行大的sql語句SQL
- sql中的or與and的執行順序問題SQL
- sql語句批量執行SQL
- java中異常處理finally和return語句的執行順序Java