Oracle分页详解(二)

如何获取雇员表中薪水最高的前五人?
select * from(select * from emp order by sal desc) where rownum<6

如何获取雇员表中薪水排名第5的雇员信息
select * from(select * from emp order by sal desc) where rownum=5;
查询不出结果,同样rownum>=5查询第5名之后的也失败的。

注意:这里的rownum只能小于,不能大于等于。

原理是因为rownum是一个每一次都要从1开始排列的伪列,于是rownum>=n.

方法一:最简单的查询,第五条到第十条

SELECT *
  FROM (SELECT a.*, ROWNUM rn
          FROM (SELECT *
                  FROM table_name) a
         WHERE ROWNUM <= 10)
 WHERE rn >= 5

只有一层嵌套,一个子查询,就是子查询得到的新表再次被查询,关键的一步就是rownum rn,而且不要忘了
a.* ,不然没有完整数据。

方法二:上面的没有排序,这里进行排序,因为要先排序才能查询,所以表越大,效率越慢

select * from
  (select rownum rm,e.* from emp e order by sal desc)
 where rm>=5 and rm<=10

方法三:分页函数方法

select * from
   (select emp.*,row_number() over(order by sal desc) rank from emp)
  where rank>=6 and rank<=10;

select * from
  (select e.*,rownum as rn from
  (select * from emp order by sal desc)e )ee
   where ee.rn>=5 and ee.rn<=10

方法四:海量数据查询

select * from(select e.*,rownum rn from
   (select * from emp order by sal desc) e
    where rownum<=10)
   where rn>=6;

分解步骤

第一步:
select * from emp order by sal desc;

第二步:
select e.*,rownum rn from(select * from emp order by sal desc) e

第三步:
select e.*,rownum rn from
(select * from emp order by sal desc) e
where rownum<=10

第四步:
select * from
select e.*,rownum rn from
(select * from emp order by sal desc) e
where rownum<=10)
where rn>=5


第五步:
with ee as (select e.*,rownum rn from
(select * from emp order by sal desc )e)

select ee.* from ee where ee.rn>=5 and ee.rn<=10;

重点:起别名必须查询出数据表才行,而查询添加用还不存在的条件去判断,自然失败。
所以才rownum和别名的使用区别

转自博客:https://www.2cto.com/database/201701/585326.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值