SQL語句的執行順序


SQL語言是一門非常簡單的語言,編寫SQL只要理解其執行邏輯就能寫出正確的SQL語句!

SQL語句和其他的編程語言最明顯的區別是處理代碼的執行順序,大多數的編程語言,代碼是按照編碼順序被處理,但是SQL語句的執行順序是不同的。

例子:

1SELECT[DISTINCT]
2FROM
3WHERE
4GROUP BY
5HAVING
6UNION
7ORDER BY

上面的例子沒有把所有的SQL語法結構都列出來,但是足夠說明SQl的語法順序和執行順序完全不一樣,上述語句的執行順序為:

1FROM
2WHERE
3GROUP BY
4HAVING
5SELECT
6DISTINCT
7UNION
8ORDER BY

SQL語句的執行順序值得注意的地方:

1.from是SQL語句執行的第一步,數據庫執行SQL語句的第一步是將數據從硬盤加載到數據緩沖區,便於對這些數據進行操作。

2.select是在大部分語句執行后才執行的,嚴格說是在from和group by之后執行,這也是在where中不能使用在select中設定別名的字段作為判斷條件的原因。

1 SELECT A.x + A.y AS z
2 FROM A
3 WHERE z = 10 -- z 在此處不可用,因為SELECT是最后執行的語句! 

如果想使用別名Z,有兩個選擇。要么重新寫一遍Z代表的表達式:

1 SELECT A.x + A.y AS z
2 FROM A
3 WHERE (A.x + A.y) = 10

或者求助衍生表,通用數據表達式或者視圖,避免別名重用。

3.無論在語法上還是執行順序上,union總是排在order by之前。很多人認為每個 UNION 段都能使用 ORDER BY 排序,但是根據 SQL 語言標准和各個數據庫 SQL 的執行差異來看,這並不是真的。盡管某些數據庫允許 SQL 語句對子查詢(subqueries)或者派生表(derived tables)進行排序,但是這並不說明這個排序在 UNION 操作過后仍保持排序后的順序。

注意:並非所有的數據庫對 SQL 語句使用相同的解析方式。如 MySQL、PostgreSQL和 SQLite 中就不會按照上面第二點中所說的方式執行。

 

用一段話總結一下:

SQL Select語句完整的執行順序:
1、from子句組裝來自不同數據源的數據;
2、where子句基於指定的條件對記錄行進行篩選;
3、group by子句將數據划分為多個分組;
4、使用聚集函數進行計算;
5、使用having子句篩選分組;
6、計算所有的表達式;
7、使用order by對結果集進行排序。
8、select 集合輸出。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM