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