主要来自:
On ROWNUM and Limiting Results
The result offset and fetch first clauses
rownum
rownum 主要有两类用处
- 处理 top N ;
- 分页查询;
rownum 的工作机制
rownum 是查询中的伪列,从 1 开始计数。
A ROWNUM value is assigned to a row after it passes the predicate phase of the query but before the query does any sorting or aggregation. Also, a ROWNUM value is incremented only after it is assigned .
rownum 的值是在行记录通过了查询的过滤阶段、在排序或聚合之前被赋值。rownum 只有在被赋值之后才会递增。select * from t where ROWNUM > 1;
是永远查不到记录的。
查询的处理步骤大概如下:
1. from/where 首先执行;
2. rownum 被递增、赋值给 from/where 子句输出的每一行;
3. 执行 select 子句;
4. 执行 group by 子句;
5. 执行 having ;
6. 执行 order by 。