Oracle基础(十二):分页查询
分页查询
分页查询就是将数据分段查询出来,而不是一次性将所有数据查询出来,一次只查询数据的一部分。
这样做可以减少系统资源开销,减少数据量可以提高网络传输速度。
分页在不同的数据库中的SQL语句是不同的。ORACLE中的分页是基于伪列ROWNUM
实现的 。
ORACLE中提供了一个伪列:ROWNUM
ROWNUM
字段不存在于任何一张表中,但是每张表都可以查询该字段。
该字段的值是结果集中每条记录的行号。ROWNUM
字段的值是伴随查询过程动态生成的。
只要可以查询出一条记录,ROWNUM
就会为该条记录生成行号,从1开始每次递增1.
(1)查询第6到第10条数据
--查询无结果,不满足WHERE条件的记录是不会查询出的,所以ROWNUM并不会记录编号 select rownum,empno,ename,sal,job from emp where rownum between 6 and 10;
由于ROWNUM
是在查询表的过程中进行编号的,所以在使用ROWNUM
对结果集编行号的
查询过程中不要使用ROWNUM
做>1以上数字的判断,否则将查询不出任何数据。
--把ROWNUM已经给记录编号的结果集当成一个表(返回多行多列子查询,当成一张表看待) select * from (select rownum,empno,ename,sal,job from emp) where rownum between 6 and 10;--查询无结果 --↑↑↑WHERE子句中的ROWNUM被视为主查询的ROWNUM, --并不是子查询中的ROWNUM,应该给子查询的ROWNUM添加别名: select * from (select rownum rn,empno,ename,sal,job from emp) where rn between 6 and 10;--这样子才能查询出数据
(2)分页查询的一些例子
--查看公司工资排名的第6-10名 select * from (select rownum rn,empno,ename,sal,job from emp) where rn between 6 and 10 order by sal desc;--SQL语句的优先级顺序不对 --查看公司工资排名的第6-10名(在分页查询时有排序需求的,先查询数据排序、然后使用伪列编行号、再取范围) select * from --step3.根据子查询伪列编号取范围 (select rownum rn,t.* from--step2.给嵌套子查询用伪列给记录编号 (select empno,ename,sal from emp order by sal desc) t)--step1.子查询结果集排序 where rn between 6 and 10;
以上的查询结果会在编号在10以上的记录都会被查询出来,最后筛选出编号6-10的记录,
这样子在数据量大的时候效率并不高,我们可以在编号的时候就设定查询记录上下限来进一步减少编号数据量。
select * from --step3.查询子查询所有记录 (select rownum rn,t.* from --step2.查询子查询记录编号上限为<=10 (select empno,ename,sal from emp order by sal desc) t --step1.查询数据并排序 where rownum<=10) where rn>=6;--step4.过滤下限记录数
(3)分页查询计算区间公式
pageSize
:每页显示的条目数page
:页数(第几页)
start
:(page-1)*pageSize+1end
:pageSize*page
假设每页显示5条数据,在第2页则显示6~10行的记录:
start=6=(2-1)*5+1
end=10=2*5
java代码如下:
int start = (page-1)*pageSize+1; int end = pageSize*page; String sql = "SELECT * "+ "FROM(SELECT ROWNUM rn,t.*"+ " FROM (SELECT empno,ename,sal"+ "FROM emp"+ "ORDER BY sal DESC) t"+ "WHERE ROWNUM <="+end+")"+ "WHERE rn>="+start;
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步