Oracle数据库中分页排序
来源:互联网 发布:济南浪潮java工资待遇 编辑:程序博客网 时间:2024/05/29 10:15
Oracle分页的实现
Oracle中分页是使用rownum实现的,可以根据页数和每页条数限制rownum的取值范围.
house_info表信息
有下面一个表,表名是house_info,表结构如下:
分页
计算rownum的取值范围
rownum的取值范围跟页数和每页条数有关,同时也跟SQL语句中运算符有关.
假设每页条数pagesize为5,取第2页的数据,则rownum的取值范围为:
startIndex=(2-1)*5;
endIndex=2*5;
实现分页
select tmp.* from (select h.*,rownum rn from house_info h where rownum <= 10) tmpwhere tmp.rn >5;
查询到的数据为:
其中,第一列是查询到的rownum的值,最后一列是子查询中rownum的值.
排序
如果是单纯的排序可以用order by来实现,且默认排序规则为asc升序,可以使用desc来设置排序规则为降序.
假设我们要按照房屋面积降序排列,我们可以这么写:
select h.* from house_info h order by area desc;
结果是:
分页排序
假设我们要得到按照面积area降序排序之后第2页的房屋信息,我们该怎么写?
我们也许会这么写:
select tmp.* from (select h.*,rownum rn from house_info h where rownum <= 10 order by area desc) tmpwhere tmp.rn >5;
但是,这样的结果是:
这跟我们的预期不一样,我们预期的数据是:
为什么会出现这样的情况?
分页排序这里有一个注意事项,就是order by 之后,并不改变查询到的数据的rownum的值.
所以,这么写我们得到的是先查询到第2页的数据,接着对第2页的数据进行排序.
而我们需要做的是先对数据进行排序,然后得到第2页的数据.
那么我们就要对语句进行更改:
select temp.* from (select tmp.*,rownum rn from (select h.* from house_info h order by area desc) tmp )tempwhere temp.rn >5 and temp.rn <=10;
这样得到的数据才是正确的数据.
总结:
注意在Oracle数据库中,使用order by 语句时,rownum的值并不会变化.如果要分页排序,需要多嵌套一层查询语句.
阅读全文
0 0
- Oracle数据库中分页排序
- Oracle数据库中分页查询中排序及效率问题
- 解决使用HIBERNATE对ORACLE数据库中数据进行排序分页错乱的问题
- 解决使用HIBERNATE对ORACLE数据库中数据进行排序分页错乱的问题
- 数据库分页大全及Oracle中分页详解
- oracle 排序分页混乱
- Oracle 分页排序 笔记
- Oracle排序分页方法
- Oracle rownum 分页, 排序
- ORACLE排序分页
- Oracle rownum 分页, 排序
- Oracle rownum 分页, 排序
- Oracle rownum 分页, 排序
- oracle分页排序
- oracle 排序分页混乱
- oracle分页排序
- oracle分页排序查询
- Oracle排序分页备忘
- 我祝你不幸并且痛苦(非鸡汤版)
- 模型选择
- Codeforces 630K
- ccf-201409-1 相邻数对
- Vue.js_demo01
- Oracle数据库中分页排序
- 动态生成的html页面转pdf并且打印预览
- 客户端通过WebService实现和服务端书交互
- shellscript 提取文件名
- poj 2286 (自己对IDA*的一些理解)
- CI框架(8)- 获得url里面的参数
- Oracle 817的client连接oracle 817的服务器端报错 ORA-12537
- 并发删除指定目录下指定扩展名的文件
- LinuxC基础编程