使用rownum进行分页查询的注意事项
参考:http://www.cnblogs.com/mabaishui/archive/2009/10/20/1587165.html
1.首先rownum是基于结果集进行编号的。。。
2.ROWNUM是一个序列,是oracle数据库从数据文件或缓冲区中读取数据的顺序。它取得第一条记录则rownum值为1,第二条为2,依次类推。如 果你用>,>=,=,between……and这些条件,因为从缓冲区或数据文件中得到的第一条记录的rownum为1,则被删除,接着取下 条,可是它的rownum还是1,又被删除,依次类推,便没有了数据。
3.列如:select se.*,rownum ro from scott.emp se where ro>5;
从emp表中,取出第一条记录,结果集中现在为空,rownum根据结果集,给它编号1,然后进行条件判断,不满足,丢掉。取出第二条记录,编号为1.。。。。
所以没有一条记录满足条件,自然查询结果为空了。。。
4.解决方法:
1.使用子查询和rownum,先将rownum的结果固定,再进行查询
2.通过子查询和row_number,进行分页查询
列题:--获取薪水从高到低排序的第5到9条记录
--通过rownum实现
--从高到低排序
select * from scott.emp order by sal desc
--编号
select rownum ro,se.* from (select * from scott.emp order by sal desc) se
--取出第5到9条记录
select * from (select rownum ro,se.* from (select * from scott.emp order by sal desc) se)
where ro>=5 and ro <=9;
--通过分析函数row_number来分页
select * from
(select row_number() over (order by sal) as rn,se.* from scott.emp se) se2
where se2.rn>=5 and se2.rn<=9;
浙公网安备 33010602011771号