rownum伪行号-排行榜-分页

 rownum伪行号-排行榜-分页

1.rownum 是oracle数据库特有的一个特性,它针对每一个查询(包括子查询),都会生成一个rownum用于对该次查询进行编号

2.每个rownum只针对当前select 查询有效,可以使用别名进行显示

例子:select rownum,emp.* from emp; --表名指定列(* 前面一定要别名指定列,或者表名指定列)

例子:查询出工资最高的前五名

--6个字句的执行先后 :from ,where,group by ,having,select ,select

--先排序,后筛选

(错误)select rownum,emp.* from emp where rownum<=5 order by sal desc; --先筛选后排序

select * from (select * from emp order by sal desc) where rownum<=5; --要先排序,后筛选

 

排行榜
例子:

--查询出工资水平在前5名的员工姓名,和工资

--理解:先排序,在通过rownum查询出前5条,在查看工资是否存在在这前5条里面

--本例包含三个查询,共有三个rownum

select ename ,sal from emp

where sal in(select * from ( select sal from emp order by sal desc) where rownum<=5) and rownum<=5;

 

例子:

--查询出工资最低的前五名

--注意:查询排行榜时,可能遇到边界问题

select rownum,emp.* from emp where rownum<=5 order by sal;

--查询出工资最低的前五名 的姓名和工资

select ename,sal from emp

where sal in (select * from (select sal from emp order by sal asc ) where rownum <=5) and rownum <=5;

 

分页查询
--分页计算参数:第几页,分页大小 --计算分页

--两种分页方法:rownum 和rownumde 别名

注意:rownum 不支持 > 和 >= 判断;rownum的别名支持>和>=判断

 

方法一

例子:

分页查询员工姓名,工资,入职日期;每页显示5条 分别查询出第1,2,3页数据

方法一:

理解:先在子查询中查询出前N页,在二次主查询查询出第N页;需要在子查询rownum别名

--首先用子查询查询出1*5 1-5页,再用主查询查询出大于(1-1)*5 >0 1-2-3-4-5 就是第1页

--首先用子查询查询出2*5 1-10页,再用主查询查询出大于(2-1)*5 >5 6-7-8-9-10就是第2页

--首先用子查询查询出3*5 1-15页,再用主查询查询出大于(3-1)*5 >5 11-12-13-14-15就是第3页

select * from (select rownum rn,emp.* from emp where rownum <=1*5) where rn >(1-1)*5

select * from (select rownum rn,emp.* from emp where rownum <=2*5) where rn >(2-1)*5

select * from (select rownum rn,emp.* from emp where rownum <=3*5) where rn >(3-1)*5

 

方法二:

--先在子查询中查询出所有的数据和数据的rownum,并使用别名表示,在第二次主查询中通过别名进行分页控制

理解:--首先用子查询查询出所有数据 ,在用主查询控制分页:(3-1)*5<=rn<=3*5 第3页

--首先用子查询查询出所有数据 ,在用主查询控制分页:(2-1)*5<=rn<=2*5 第2页

--首先用子查询查询出所有数据 ,在用主查询控制分页:(1-1)*5<=rn<=1*5 第1页

select * from (select rownum rn,emp.* from emp ) where rn<=3*5 and rn>=(3-1)*5;

select * from (select rownum rn,emp.* from emp ) where rn<=2*5 and rn>=(2-1)*5;

select * from (select rownum rn,emp.* from emp) where rn<=1*5 and rn>=(1-1)*5;

方法一的效率更高

posted @ 2019-07-26 21:05  xiaomingit  Views(283)  Comments(0Edit  收藏  举报