分页sql

伪列:rownum 他是Oracle数据库内置列,任何表都可以使用,他作用是显示表中数字的行号

select * from emp;
select emp.*,rownum from emp;
select t.*,rownum r from(select * from emp order by sal)t;

--查询工资最低的5名员工信息

select t.*,rownum r from (select * from emp order by sal)t where rownum<=5;

--注意如果给伪劣加条件,小于一个值是可以,不能让他大于某个值,也不能直接等于一个不等于1的值,但可以直接等于1

select t.*,rownum r from(select * from emp order by sal)t where rownum>=2;
 --伪列不能直接大于一个值

select t.*,rownum r from (select  *  from emp order by sal) t where rownum=5; 
 --伪列不能直接等于一个不等于1的值

select t.*,rownum r from (select  *  from emp order by sal) t where rownum=1;  
--伪列可以直接等于1

使用rownum的分页sql,rownum伪列的序号,只连续的不考虑值相等的情况(值相同序号不相同)

row_number():需要和over分析函数联用,排序的序号和rownum伪列相同,连续序号,不考虑值相等的情况(值相同序号不相同)比如值为aabfdgg 序号为1234567

select * ,row_number()over;

dense_rank():可以用来做排序,它序号连续,考虑重复数据,如果值相等序号就相同

rank():可以用来做排序,它序号不连续,考虑重复数据,如果值相等序号相同

比如值为aabbcchjk 序号为112233456

over(partition by 分组列 order by 排序列):over子句中的分组partition by和group by的分组不同,它不会把数据聚合成一条,在over子名中可以省略

select e.*,row_number()over(order by sal desc) r from emp e;

select e.*,dense_rank()over(order by sal desc) r from emp e;

select e.*,rank()over(order by sal desc) r from emp e;


select e.*,row_number()over(partition by deptno order by sal desc) r from emp e;

select e.*,dense_rank()over(partition by deptno order by sal desc) r from emp e;

select e.*,rank()over(partition by deptno order by sal desc) r from emp e;

使用row_number(),rank(),dense_rank()的分页sql,只需要一层子查询

select * from (select e.*,row_number()over(order by sal) r from emp e) t where t.r between 5 and 10;

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值