晚上在论坛上看到一条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 对结果集进行排序