SQL 查詢總是先執行SELECT語句嗎?你們都錯了!


SELECT語句中子句的順序。SELECT語句中使用時必須遵循的次序。

經過一段時間的學習,我們知道了SELECT語句超簡版的語法如下:

SELECT 字段名 FROM 表名

后來,我們又陸續學習了WHERE/GROUP BY/HAVING/ORDER BY等子句……

因此,我們今天就來說下SELECT語句較為完整的語法結構(如下)與它的執行順序是怎么樣的?

SELECT [DISTINCT] [TOP] 字段名 
FROM 表名
[WHERE] 行級過濾
[GROUP BY] 分組
[HAVING] 組級過濾
[ORDER BY] 排序

文字版較完整的SELECT語句執行順序如下:

1)SQL首先執行的是FROM子句,根據FROM子句中指定的一個或多個表創建表。

2)如果存在WHERE子句,則對步驟1獲得的表進行條件過濾,刪除不符合條件的行記錄。

3)如果存在GROUP BY子句,則對步驟2生成的表按指定字段進行分組,生成一份新的數據表。

4)如果存在HAVING子句,則對步驟3的表按指定條件進行過濾,刪除不滿足過濾條件的記錄。

5)執行SELECT子句,刪除不包含在SELECT子句所指定的字段。如果SELECT子句中包含關鍵字DISTINCT,則執行去重運算。

6)如果有ORDER BY子句,則按指定的排序規則對結果表進行排序操作。

7)如果有TOP謂詞,則再進行TOP運算。


表格版較完整的SELECT語句執行順序如下:

順序

子句

說明

是否必須使用

1

FROM

從中檢索數據的表

僅在從表中選擇數據時使用

2

WHERE

行級過濾

3

GROUP BY

分組說明

僅在按組計算聚集時使用

4

HAVING

組級過濾

5

SELECT

要返回的列或表達式

6

DISTINCT

返回唯一不同的值

7

ORDER BY

輸出排序順序

8

TOP

規定要返回的記錄的數目

總結:SQL的執行順序,既不是語句的先后順序,也不是由內到外的順序;比如,最先出現的SELECT 子句並非首先執行的,它的執行順序處在HAVING之后和ORDER BY之前。DISTINCT的位置處在TOP之前,但TOP的運算順序又在DISTINCT之后。

 

點擊關注“SQL數據庫運維”,后台回復關鍵字:進群,帶你進入高手如雲的技術交流群。

  

  


免責聲明!

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



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