您的位置:首页 > 数据库 > Oracle

Oracle分页查询语句

2016-12-06 09:48 295 查看
声明:此文章纯属自己的观点,理解程度不同,但保证文章的正确性,以供雅俗共赏

先说一下mysql的分页查询

mysql分页语句:select 要查询的列 from 表名称 limit ?,?

该SQL语句的意思是:从第几行开始,然后取多少行,mysql中,第一行的下标是0

例如我要取数据库中的前10行数据,我的SQL语句应该这样写

select * from user limit 0,10;从0坐标开始,查询10行数据,总共10行数据   注意:坐标是从数据库的表中哪行数据开始的位置,后面的行数才是

你总共查询的数据的个数,包括你开始时的 坐标的那条数据

oracle中有一个rownum的伪列,因为该rownum伪列不支持>号,所以向下面的这种条件查询语句是行不通的,但是它又不像SQL语句那样可以使用

select * from limit ?,?   limit 关键字在Oracle中也是没有的,那我们如何分页查询Oracle中的一张表的数据呢?

分析:我们可以给要分页的表增加一个列,该列显示表数据每行的行数,如rownum伪列就有这项功能,这样增加的列名就不是伪列,而是

一个查询结果的表数据中的一个新列

下面开始步骤:

打开Oracle数据库,复制下面的查询语句即可看到真实的效果,如果你喜欢看字理解,那更好了,截图的图片太大了上传不了

select * from emp;

先看下要分页表中的所有的数据

以该表的数据为基础增加一个新的列rw,获得一个新的表数据

select rownum rw ,e.* from (select * from emp) e where rownum <=10;

将获得的这个有rw列的表做为查询对象进行分页数据的获取

select * from (select rownum rw ,e.* from (select * from emp) e where rownum <=10

 ) t where t.rw>=1;

这样就查询到了从零坐标开始一直到第九条数据,因为行号是<10的所以只有9条数据

这样的话就完成了分页查询,以后只需要修改开始的坐标rw,和结束的行号就可以了,所以总结查询一张Oracle的分页数据的语句如下

select * from (select rownum rw ,e.* from (select * from emp) e where rownum <=结束行号

 ) t where t.rw>=开始行号

另附开始和结束行号的计算:

已知条件

pageNo:当前的页码

pageSize:每页记录数

未知条件

startNum:开始行号

endNum:结束行号

pageNo      pageSize       startNum      endNum

   1            5              0            6          

   2            5              5            11

   3            5              10           16

   

   startNum = (pageNo - 1)*pageSize;

   endNum = pageNo*pageSize + 1;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: