java oracle数据库高效分页查询_Oracle学习之分页查询数据

Oracle的分页是不同于MySQL的,今天我们来讨论一下Oracle的分页,首先得知道两个概念

rowid和rownum

什么鬼?有鸟用啊?

我们从字面的英文翻译可以知道rowid是 “行id”,rownum是“行数字”

rowid是记录在创建的时候生成的,而且是不变的,直接指向硬件上的存储位置

我们可以在SQL Develop中选中一张表,右键 Edit data,就可以看到这么 一张表,这里依旧是使用scott自带的emp表演示:

可以看到每条记录都有一个rowid

我们可以这样使用rowid来查询

效率是最高的,但是rowid是由Oracle维护,程序猿无法做到。

rownum“行的数”,它是一个伪列,查询的时候,除非特别指定,否则不会显示,表示行号,常用于控制返回的行号。

说白了,伪列,要是记不住它可以把它当作“假冒伪劣产品",用来表示查询的记录是在第几行的,如下:

说了,这么多,这个“假冒伪劣产品”伪列有什么鸟用啊?

我们看,我们已经知道第几行什么元素,我们是不是就可以分页了

我们按照工资的大到小排序先:

嗯~ o(* ̄▽ ̄*)o? what?怎么伪列的顺序被打乱了,这还排个毛啊!!!!

由此我们也可以看出来,当 rownum 和 order by 一起使用时,会首先选出符合 rownum

条件的记录,然后再进行排序.,就是我们上面图片出现的情况↑ ↑ ↑

因此, 需要用子查询来完成.

好了,我们现在显示一下工资从大到小前5条的记录

接着,我们想要看一下,6——10的记录,怎么办呢?

what????什么鬼,没有???

由于先要进行 where 条件判断, 满足条件后才能生成

rownum, 所以导致 rownum 无法进行大于(>)和大于等于(>=)

的判断. 此时, 需要使用嵌套子查询来实现

也就是再把它当作一张表,我们再查找

那么问题来了,有没有什么规律呢?当传入一个page(当前页数),size(每页显示的记录数),我们该怎么表示呢?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值