Group By和Having,Where,Order by語句的執行順序

Group By和Having,Where,Order by語句的執行順序

一個SQL語句往往會產生多個臨時視圖,那麼這些關鍵字的執行順序就非常重要了,因為你必須瞭解這個關鍵字是在對應視圖形成前的字段進行操作還是對形成的臨時視圖進行操作,這個問題在使用了別名的視圖尤其重要。

Group By 和 Having, Where ,Order by這些關鍵字是按照如下順序進行執行的:Where, Group By, Having, Order by。

首先where將最原始記錄中不滿足條件的記錄刪除(所以應該在where語句中儘量的將不符合條件的記錄篩選掉,這樣可以減少分組的次數)

然後通過Group By關鍵字後面指定的分組條件將篩選得到的視圖進行分組

接著系統根據Having關鍵字後面指定的篩選條件,將分組視圖後不滿足條件的記錄篩選掉

最後按照Order By語句對視圖進行排序,這樣最終的結果就產生了。

在這四個關鍵字中,只有在Order By語句中才可以使用最終視圖的列名,如:

SELECT FruitName, ProductPlace, Price, ID AS IDE, Discount

FROM T_TEST_FRUITINFO

WHERE (ProductPlace = N'china')

ORDER BY IDE

這裡只有在ORDER BY語句中才可以使用IDE,其他條件語句中如果需要引用列名則只能使用ID,而不能使用IDE。

PS:

凡是在group by後面出現的字段,必須同時在select後面出現;

凡是在select後面出現的、同時未在聚合函數中出現的字段,必須同時出現在group by後面.

having 子句被限制子已經在SELECT語句中定義的列和聚合表達式上。


分享到:


相關文章: