Oracle数据库中的分页查询
分页关键词rownum
和MySQL不同,MySQL中使用Limit进行分页实现,比如select * from t limit 10,5
实现了查询(10,10+5]范围内的数据。Oracle数据库不支持limit关键字,但是有rownum这一虚拟字段。
rownum
- rownum是一个伪列,由数据库自己创建。
- rownum会在条件满足后、结果集确定后自动编排。
比如select * from t where rownum < 5
可以实现前4条数据的查询。
但是rownum并不能简单的实现理想的分页,比如select * from t where rownum <= 15 and rownum > 10
来实现上面的mysql同效果的语句是不可取的。因为rownum仅支持<、<=等。
一般情况下,使用rownum > 的语句会导致查询的结果为空。
- 因为如上所说,rownum是一个伪列,且会在条件满足时编排,当
where rownum>1
时,会依次对结果每行进行条件校验,第一行不满足就会舍弃,第二行又变成第一行导致rownum重新编排,以此类推,每一行都因不符条件被舍弃,返回的结果必定为空。 - 由此推出,当执行
where rownum > 0 or rownum >= 1
时,是可以正常返回结果集,只是没什么意义
实现分页查询
知道了rownum的用法就可以实现分页查询了,因为不能使用rownum > 的用法,因此可以通过以下这种方式实现分页
SELECT * FROM ( SELECT td.* , ROWNUM RN FROM table_demo td WHERE ROWNUM <= 15) WHERE RN > 10
TIPS
- 因为是伪列,不能在select语句后使用rownum的别名,比如
select td.* , rownum rn from table_demo td where rn <= 10
- 子句中的
oredr by
可以接rownum别名 - 分页查询的嵌套查询中父语句将子句的结果集又重新做了查询,子集中的伪列在顶层查询中视为了真列,可以使用别名
分类:
Springboot
标签:
数据库
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南