oracle分页排序查询sql语句_如何进行分页

oracle分页排序查询sql语句_如何进行分页分页 + 排序 一.简单分页: 需求:分页查询台账表T_ACCOUNT,每页10条记录 分析:我们在ORACLE进行分页查询,需要用到伪列ROWNUM和嵌套查询 我们首先显示前10条记录,语句如下:…

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

分页 + 排序

一.简单分页:

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

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

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

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

显示结果如下:

oracle分页排序查询sql语句_如何进行分页

 

好像没有问题~

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

select rownum,t.* from T_ACCOUNT t

where rownum>10 and rownum<=20

查询结果:

oracle分页排序查询sql语句_如何进行分页

 

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

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

代码100分

 

 

(二)分页+排序

需求:分页查询台账表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 ;

 

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

oracle分页排序查询sql语句_如何进行分页

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

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

 

 

怎么解决呢?

so easy~~~

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

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

代码100分--分页+排序  (分三步; 第一步先查询排序,第二步然后根据排序结果原基础上加一列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;

 

结果如下:

oracle分页排序查询sql语句_如何进行分页

 

 

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

 

 

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/8150.html

(0)
上一篇 2023-03-06
下一篇 2023-03-06

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注