ORACLE学习日记——数据库分页查询

引出

当我们查询数据库的时候最简单的做法就是

SELECT *
FROM emp;

这种查询方式在早期学习数据库的时候没有什么问题,可以让我们以最快的速度看到一个数据库的完整信息。但是随着开发的项目越来越庞大,数据量也越来越大。当一个表中有十万条代码的时候,每次查询全部,既不好显示,也会是项目性能下降。这时候我们就需要将查询后的结果分页显示。
问题:如何以五条数据为一组,按组依次查询?

思路

既然是查询特定的几条数据,那我们就想到ORACLE提供的伪列ROWNUM,这个伪列可以显示每一条数据,在数据库中的第几行。

SELECT ROWNUM,empno,ename,sal,job,hiredate 
FROM emp;

在这里插入图片描述
当我们在SELECT子句中查询ROWNUM之后,ORACLE自动为我们的每条数据自动添加一个行号。那么我们是否可以利用这个伪列,作为查询条件进行查询呢?

尝试

SELECT ROWNUM,empno,ename,job,sal,hiredate 
FROM emp 
WHERE ROWNUM BETWEEN 0 AND 5;

在这里插入图片描述
可以看到在我们将ROWNUM作为查询条件放到WHERE子句之中,我们确实成功将前五行数据查询出来,那么我们可以就用此方法完成分页吗?

SELECT ROWNUM,empno,ename,job,sal,hiredate 
FROM emp 
WHERE ROWNUM BETWEEN 5 AND 10;

在这里插入图片描述
很遗憾,我们发现并未查询到任何数据,这是由于我们的ROWNUM伪列是自动生成的,并不固定。所以我们需要改变一下思路。

改善

我们发现ROWNUM作为查询条件只有从0开始查才是有效的,那么我们可以尝试先将目标位置之前的所有数据作为一个临时表先查询出来,然后在这个临时表中再去截取相应的数据。

SELECT * 
FROM (
	SELECT ROWNUM rm,empno,ename,job,sal,hiredate 
	FROM emp 
	WHERE ROWNUM<=10) temp 
WHERE temp.rm>5; 

在这里插入图片描述
可以看到我们在这里利用子查询成功将6到10条数据查询出来,只要改变两个WHERE子句中的数字,就可以查询不同页面中的数据。

延伸

我们现在成功实现了查询特定行的数据,但是是使用数字写死的方式编写SQL语句,我们可以发现,这两个数字其实是有规律可寻的。
我们设currentPage表示当前页,pageSize 表示每页显示的数据条数。

SELECT * 
FROM (
	SELECT ROWNUM rm,empno,ename,job,sal,hiredate 
	FROM emp 
	WHERE ROWNUM<=*(currentPage*pageSize) temp 
WHERE temp.rm>(currentPage-1)*pageSize; 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值