標準的 SQL 解析順序

iSQlServer發表於2010-10-08
在CSDN看到看到一條SQL查詢語句的問題,如下所示:

select *,row_number() over(order by productname) as rownumber
from products where rownumber between 10 and 20 

 

問題是這條SQL語句會報錯。經過分析發現,這跟SQL的解析順序有關係因為在計算where的時候row_number還沒算出來。所以SQL語句會報錯。

標準SQL解析順序如下所示:

   (1).FROM 子句, 組裝來自不同資料來源的資料
   (
2).WHERE 子句, 基於指定的條件對記錄進行篩選
   (
3).GROUP BY 子句, 將資料劃分為多個分組
   (
4).使用聚合函式進行計算
   (
5).使用 HAVING 子句篩選分組
   (
6).計算所有的表示式
   (
7).使用 ORDER BY 對結果集進行排序

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16436858/viewspace-675541/,如需轉載,請註明出處,否則將追究法律責任。

相關文章