SQL常用的關鍵字使用順序

目錄

1、sql語句順序

2、sql執行順序

3、使用注意

4、需要說明的是


注意:sql 不區分大小寫

select column_name from table_name where condition group by column_name having condition order by column_name desc/asc limit 1;

1、sql語句順序

查詢中用到的關鍵詞主要包含七個,並且他們的順序依次爲:

select --> from --> where --> group by --> having --> order by --> limit

其中select和from是必須的,其他關鍵詞是可選的

2、sql執行順序

七個關鍵詞的執行順序是:

from --> where --> group by --> having --> select --> order by --> limit

from:需要從哪個數據表檢索數據 。

where:過濾表中數據的條件。

group by:如何將上面過濾出的數據分組。

having:對上面已經分組的數據進行過濾的條件。

select:查看結果集中的哪個列,或列的計算結果。

order by: 按照什麼樣的順序來查看返回的數據。

limit:對查詢出的結果進行分頁顯示。

3、使用注意

①、from後面的表關聯,是自右向左解析的,而where條件的解析順序是自下而上的。

也就是說,在寫SQL的時候,儘量把數據量小的表放在最右邊來進行關聯(用小表去匹配大表);而把能篩選出小量數據的條件放在where語句的最左邊 (用小表去匹配大表)。

②、使用count(列名)當某列出現null值的時候,count(*)仍然會計算,但是count(列名)不會。

③、group by:select 列a,聚合函數(聚合函數規範) from 表明 where 過濾條件 group by 列a

group by 子句也和where條件語句結合在一起使用。當結合在一起時,where在前,group by在後。即先對select xx from xx的記錄集合用where進行篩選,然後再使用group

by對篩選後的結果進行分組。

④、having:having條件表達式,但是需要注意having和where的用法區別:

i. having只能用在group by之後,對分組後的結果進行篩選(即使用having的前提條件是分組)。

ii. where肯定在group by之前,即也在having之前。

iii. where後的條件表達式裏不允許使用聚合函數,而having可以。

⑤、當一個查詢語句同時出現了where, group by, having, order by的時候,執行順序和編寫順序是:

i. 執行where xx對全表數據做篩選,返回第1個結果集。

ii. 針對第1個結果集使用group by分組,返回第2個結果集。

iii. 針對第2個結集執行having xx進行篩選,返回第3個結果集。

iv. 針對第3個結果集中的每1組數據執行select xx,有幾組就執行幾次,返回第4個結果集。

v. 針對第4個結果集排序。

4、需要說明的是

4.1、當同時含有where子句、group by 子句 、having子句及聚集函數時,執行順序如下:

    執行where子句查找符合條件的數據;
    
    使用group by 子句對數據進行分組;對group by 子句形成的組運行聚集函數計算每一組的值;最後用having 子句去掉不符合條件的組。
    
    having 子句中的每一個元素也必須出現在select列表中。有些數據庫例外,如oracle。
    
    having子句和where子句都可以用來設定限制條件以使查詢結果滿足一定的條件限制。
    
    having子句限制的是組,而不是行。where子句中不能使用聚集函數,而having子句中可以。
    
4.2、where在分組前過濾,having在分組後過濾

4.3、having字段必須是查詢出來的,where字段必須是數據表存在的。

4.4、where不可以使用字段的別名,having 可以。因爲執行WHERE代碼時,可能尚未確定列值。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章