1.第一种写法
select *from (
selectrownum rm,a.* from (
selectxs.xh,xs.xbm,cf.xm,cf.qfr,cf.qfrq from cfxxb cf,xsjbxxb xs
wherecf.xh=xs.xh and cf.cflx='警告'and cf.xm like '%李%'
orderby qfrq desc
) a) where rm between 1 and 10
2.第二种写法
SELECT*
FROM(
SELECTROWNUM RN,TA.*
FROM(
selectxs.xh,xs.xbm,cf.xm,cf.qfr,cf.qfrq
fromcfxxb cf,xsjbxxb xs where cf.xh=xs.xh and cf.cflx='警告' and cf.xm like '%李%'
orderby qfrq desc
)TA WHEREROWNUM <= 10
)WHERE RN> 1
3.总结
第二种方法在大多数情况拥有较高的效率。分页的目的就是控制输出结果集大小,在上面的分页查询语句中,这种考虑主要体现在WHERE ROWNUM <= 20这句上。
选择第11到20条记录存在两种方法,第二种方法正是在查询的第二层通过ROWNUM <= 20来控制最大值,在查询的最外层控制最小值。而第一种方法是去掉查询第二层的WHEREROWNUM <= 20语句,在查询的最外层控制分页的最小值和最大值。
数据库管理员在优化的时候,第二种情况下优化效果更好。