数据库结果集分页

分页在项目中经常用到。SQL中没有”上一页“、“下一页”的概念,所以必须要对处理的行按照某种方式排序,才能精确返回想要的结果。

首先介绍一下row_number() over(partition by col1 order by col2),先根据col1分组,在分组内部再根据col2排序;得到的结果值就表示每组内部排序后的顺序编号(从1开始递增)。

对于DB2、Oracle和SQL Server使用窗口函数row_number() over,据此排序,而且能够在where子句中指定要返回的窗口记录:

select sal
from(
     select 
     row_number() over(order by sal) as rn, 
     sal
   from emp
  ) x
where rn between 1 and 5
本例返回1~5行。只需修改where子句,就能返回所需的行。

对于MySQL,由于其支持LIMIT和OFFSET子句;可以使用LIMIT指定返回的行数,使用OFFSET指定要跳过的行数,指定OFFSET为0表示从第1行开始,指定OFFSET为5表示从第6行开始。

例如按工资顺序返回前五行:

select sal
from emp
order by sal limit 5 offset 0



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值