文章详情

短信预约信息系统项目管理师 报名、考试、查分时间动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Oracle中如何实现分页+排序? 其中遇到的问题,你,注意了嘛???

2021-09-25 01:53

关注

Oracle中如何实现分页+排序?  其中遇到的问题,你,注意了嘛???

分页 + 排序

一.简单分页:

需求:分页查询台账表T_ACCOUNT,每页10条记录

分析:我们在ORACLE进行分页查询,需要用到伪列ROWNUM和嵌套查询

     我们首先显示前10条记录,语句如下:

select rownum,t.* from T_ACCOUNT t where rownum<=10

显示结果如下:

 

好像没有问题~

那么我们显示第11条到第20条的记录呢?编写语句:

select rownum,t.* from T_ACCOUNT t

where rownum>10 and rownum<=20

查询结果:

 

可能查询的结果就为空查不到了,为什么这样?  该如何解决呢?

这是因为rownum是在查询语句扫描每条记录时产生的,所以不能使用“大于”符号,只能使用“小于”或“小于等于” ,只用“等于”也不行。

那怎么办呢?我们可以使用子查询来实现,分步骤编写:

--基本分页
--1.查询所有台账表
select * from t_account;

--2.查询所有的台账表,含rownum (注意;显示数据要加自定义名称如: a.* 否则报错)
select rownum,a.* from t_account a;

--3.第一页,前10条
select rownum,a.* from t_account a where rownum<10;


--如果直接使用>会查不出结果
--这是因为rownum是在查询语句扫描每条记录时产生的,所以不能使用“大于”符号,只能使用“小于”或“小于等于” ,只用“等于”也不行。
--4.第二页, rownum在处理每行数据时,不能使用大于号>
select * from (select rownum r,a.* from t_account a) t
where t.r > 10 and t.r <=20;

 

 

(二)分页+排序

需求:分页查询台账表T_ACCOUNT,每页10条记录,按使用字数降序排序。

我们查询第2页数据,如果基于上边的语句添加排序,语句如下:

select * from (select rownum r,a.* from t_account a order by a.usenum desc
) t
where t.r > 10 and t.r <=20 ;

 

得到的结果可能是这样的:

你会发现排序后的R是乱的。

这是因为ROWNUM伪列的产生是在表记录扫描是产生的,而排序是后进行的,排序时R已经产生了,所以排序后R是乱的。

 

 

怎么解决呢?

so easy~~~

我们只要再嵌套一层循环(一共三层),让结果先排序,然后对排序后的结果再产生R,这样就不会乱了。

总的来说分三步; 第一步先查询排序,第二步然后根据排序结果原基础上加一列rownum,第三步最后根据加了rownum的结果进行分页, 否则一句话写完的话,就会导致rowNum的排序是乱的,不能进行分页 )

--分页+排序  (分三步; 第一步先查询排序,第二步然后根据排序结果原基础上加一列rownum,第三步最后根据加了rownum的结果进行分页, 否则一句话写完的话,就会导致rowNum的排序是乱的,不能进行分页 )
--1.查询所有 + 排序
select * from t_account order by usenum desc;


--2.结果--> + rownum
select rownum,t.* from 
(select * from t_account order by usenum desc)t;



--3.结果--->分页条件
select * from (

select rownum r,t.* from 
(select * from t_account order by usenum desc)t

)t2  where t2.r>10 and t2.r<=20;

 

结果如下:

 

 

这样就没问题了,今天的你get到了吗~~~~~~嚯嚯

 

 

看完恭喜你,又知道了一点点!!!

你知道的越多,不知道的越多! 

~感谢志同道合的你阅读,  你的支持是我学习的最大动力 ! 加油 ,陌生人一起努力,共勉!!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯