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

藍澀街燈發表於2021-08-06

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資料庫運維”,後臺回覆關鍵字:進群,帶你進入高手如雲的技術交流群。

  

  

相關文章