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

database

分页 + 排序

一.简单分页:

需求:分页查询台账表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到了吗~~~~~~嚯嚯

 

 

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

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

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

以上是 Oracle中如何实现分页+排序?其中遇到的问题,你,注意了嘛??? 的全部内容, 来源链接: utcz.com/z/533939.html

回到顶部