SQL 分页查询

假设有表如下
CREATE TABLE test
(
 id int primary key not null identity,
 names varchar(20)
问id是递增的,为啥不能对id操作
假设啊,表可能有个删除操作,id不是连续的,再假设查询是有条件的,查出来的id也不是连续的
插入100条数据
问:
分10页,每页10 ,取第五页
计算currentPage=5
PageSize=10
那么 start=(currentPage-1)*PageSize+1
end=start+PageSize-1
也就是40-50条数据
不使用临时表归集数据的情况
oracle中
select*from test where ROWNUM<=50 and ROWNUM>=41
这样不行为什么
得这样
select*from (select ROWNUM rn ,names from test where ROWNUM<=50 ) where rn>=41
还有一种
select*from (select row_number() over(order by id) rn ,names from test) where rn>=41 and rn<=50
更高效点select*from (select row_number() over(order by id) rn ,names from testwhere ROWNUM<=50 ) where rn>=41
sql server 中
row_number() over (order by) 一样用法
 
使用临时表
临时表的话,也一样,最后的临时表中创建序号字段
最后数据归集到临时表时用row_number() over(order by id) 排序确定序号的值
然后对最后的临时表进行分页查询
直接对序号字段操作就可以了
 
原文地址:https://www.cnblogs.com/liuyudong0825/p/12434764.html