Oracle分页实现原理

来源:互联网 发布:win 写的java导入到mac 编辑:程序博客网 时间:2024/06/17 00:42

参考于:http://blog.csdn.net/anxpp/article/details/51534006
Oracle中的表,除了我们建表时设计的各个字段,其实还有两个字段(此处只介绍2个),分别是ROWID(行标示符)和ROWNUM(行号),即使我们使用DESCRIBE命令查看表的结构,也是看不到这两个列的描述的,因为,他们其实是只在数据库内部使用的,所以也通常称他们为伪列(pseudo column)。

对于分页,我们只要想办法可以查询到从某一起始行到终止行就可以的,分页的逻辑可以放到程序里面。于是,我们理所当然会想到如下语句查询第2页的数据(每页2条数据,页码从1开始,所以起始行的行号为 (页码-1)*每页长度+1=3,终止行的行号为 页码*每页长度=4)。

Oracle分页语句:

select * from temp > 2
该sql查询不到任何信息,因为oracle 中数据行rownum是中1 开始的, 既然找到了原因,解决方法也就很明显了,我们只要将行号查询出来生成一个结果集,然后再从这个结果集中,选择行号大于我们设定的那个值就可以了,上面的分页查找正确的写法应该是这样:

内层控制需要查询多少行的数据
外层 控制 从内层查询显示到的数据最小行数

> Select 字段1,字段2 From 表名(   select rownum as rn, a.* from a where rownum> <= 5 )aa where aa.rn >1
原创粉丝点击