Oracle分页查询时可以添加别的字段,Oracle中如何实现分页+排序? 其中遇到的问题,你,注意了嘛???...

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

c3b78d4382c301cdeafdfda4f40b051e.png

分页 + 排序

一.简单分页:

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

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

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

select rownum,t.*fromT_ACCOUNT twhere rownum<=10

显示结果如下:

1948ef560fc55841a7739538827f931f.png

好像没有问题~

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

select rownum,t.*fromT_ACCOUNT t

where rownum>10 and rownum<=20

查询结果:

b4aed9e5b08c0da89a70d68cb3065eac.png

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

这是因为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 ;

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

c9c0706bbd3b8ccae62c6c451c5575a9.png

你会发现排序后的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;

结果如下:

9d55b23d5530eb5dd022eddd36c12c30.png

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

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

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

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

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值