--第三层:分页过滤 select b.* from ( --第二层:给定行号 select rownum r,a.* from ( --第一层:排序 select * from 表 order by 字段 ) a where rownum<=最大行 )b where b.r between 最小行 and 最大行 |
★★★关键点:先排序,后给行号,两个步骤要分开!
为了程序的通用性,对任意数据集都能分页,利用子查询改为如下结构:
--第三层:分页过滤 select b.* from ( --第二层:给定行号 select rownum r,a.* from ( --第一层:排序 select * from (一个已经排序的数据集) ) a where rownum<=最大行 )b where b.r between 最小行 and 最大行 |
如上面的查询改为:
--第三层:分页过滤 select b.* from ( --第二层:给定行号 select rownum r,a.* from ( --第一层:排序 select * from (select t.* from t_stu t order by s_birthday desc) ) a where rownum<=最大行 )b where b.r between 最小行 and 最大行 |
或者其它查询语句:
--第三层:分页过滤 select b.* from ( --第二层:给定行号 select rownum r,a.* from ( --第一层:排序 select * from (select t.* from 新闻表 t order by 发贴日期 desc) ) a where rownum<=最大行 )b where b.r between 最小行 and 最大行 |