row_number()和rownum的区别

ROWNUM必须从1开始!这是由rownum的特性(没有1就不会有2,没有3……以此类推下去)

<1>第一页数据

SELECT ROWNUM ,t.* FROM ( 
   SELECT e.* FROM emp e ORDER BY e.sal DESC  ) t 
WHERE ROWNUM between 1 AND 3

结果: 
这里写图片描述

<2>第二页数据

SELECT ROWNUM ,t.* FROM ( 
   SELECT e.* FROM emp e ORDER BY e.sal DESC  ) t 
WHERE ROWNUM between 4 AND 6

结果:

这里写图片描述

如何正确显示第二页的数据呢?

有两种方法:

第一种:以上的sql语句再嵌套一个SELECT语句

SELECT k.* FROM (
  SELECT ROWNUM r,t.* FROM ( 
     SELECT e.* FROM emp e ORDER BY e.sal DESC  ) t 
 ) k
WHERE r between 4 AND 6

结果:

这里写图片描述

第二种:使用ROW_NUMBER()OVER()函数

select t2.* 
  from (select t.*, row_number() over(order by t.sal desc) orderNumber 
          from emp t 
        ) t2 
where orderNumber between 4 and 6;

结果:

这里写图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值