Oracle数据库ROWNUM进行分页查询的方法及注意事项
在oracle数据库中分页查询与sqlserver方式是不大一样的,当然分页思想是一样的,这里记录下第一次用oracle分页查询的总结。
oracle提供了一个rownum用来记录行号【ROWNUM是一个序列,会根据sql语句自动给你加上一列排好顺序的序号列】,这样我们就可以通过这个列的数值进行分页,每次只查询指定范围的内容。
注意:
ROWNUM针对的是查询出来的结果进行的编号的。也就是说一定要先有查询结果集,ROWNUM是对结果集加的一个伪列,即先查到结果集后给结果集又加上去了一个列。所以一定要用一个嵌套方式将“查询结果”和“根据结果rownum分页”分开进行。
典型错误用法:
select g.* from grade g where rownum > 10 order by chinese;
这么查询是没有结果的,这又涉及到了rownum的查询方式。rownum是对符合条件的结果进行查询这点没毛病,但是他总是从1开始排起的,即第一条记录rownum=1,第二条记录rownum=2依次类推。所以你选出的结果不可能没有1,而有其他大于1的值。所以当你直接rownum > 10的时候,从缓冲区或数据文件中得到的第一条记录为rownum=1不符合要求被删除,继续取下一条,rownum还是从1开始(rownum=1),所以你就一直取不到。【>,>=,=,between....and....一样存在这个问题】。
解决办法:我们先查询出结果集,之后再利用rownum就好了。
正确用法:
select MyGrade.*
from (select G.*, rownum rn from (select g.* from grade g order by chinese) G ) MyGrade
where MyGrade.rn >= 10;
如下:我写的一个分页(现在是第一页),内部查询条件是时间+数据类型筛选,查询出结果集后再针对rownum进行分页就可以使用>号了,最后加了一个根据时间排序。
--分页(用rownum去查)
select * from(select ROWNUM rn,logid, ltime, lperson, loperation, ldatatype, lstatus from(
select * from SDE.LOGS where LTIME>=to_date('2020-02-01','yyyy-mm-dd') and LTIME<=to_date('2020/09/02','yyyy-mm-dd') and LDATATYPE='矢量数据')
)where rn>(1-1)*15 and rn <=(1*15) order by LTIME DESC;
结果(因为结尾加了个根据时间倒序排序,所以RN序号是乱的哈):
相关文章
- 【Oracle】数据库登陆错误:ORA-28000:the account is locked解决方法
- Confluence 6 Oracle 测试你的数据库连接
- oracle查看分区表分区情况及表的创建语句
- Oracle中用exp/imp命令快速导入导出数据
- Oracle的ORA-02292报错:违反完整性约束,已找到子记录
- oracle String 时间相减
- DBLink实现备份文件不落盘的导入其他Oracle数据库实例的方法
- Oracle数据库 查看表是否是 索引组织表的方法
- [工作相关] GS产品使用LInux下Oracle数据库以及ASM存储时的数据文件路径写法.
- Ubuntu-14.04.6 安装 oracle 12.2.0.1 数据库database软件
- Ubuntu-14.04.6 安装 oracle 11.2.0.4 数据库database软件
- linux 通过tar直接打包方式 迁移oracle的软件包环境:rdbms/lib/config.c
- 【ERROR: ORA-28002: the password will expire within 7 days】Oracle数据库长期未使用,密码即将过期,解决办法!(已更新方法)
- 【Java连接Oracle数据库 代码和逻辑结构】
- 关于jave在oracle驱动下事务提交与回滚问题
- Oracle数据库--解决单张表中数据量巨大(大数据、数据量上百万级别,后查询,更新数据等耗时剧增)
- 解决Oracle 11gR2 空闲连接过多,导致连接数满的问题
- 【JDBC】java程序通过jdbc连接oracle数据库方法
- Dapper Oracle数据库 插入(INSERT)数据时参数指定为null的方法
- Python中Pandas通过read_sql方法从Mysql或Oracle数据库中读取数据帧(DataFrame)
- 80.网络安全渗透测试—[SQL注入篇19]—[Oracle+JSP-9种报错注入]
- Oracle数据库手工获取AWR报告
- 探索Oracle之数据库升级六 11.2.0.4.3 Upgrade12c(12.1.0.1)