Sql数据分页原理
假定每页取10条数据,下面以取第3页数据为例(注意:一定要考虑自增id很可能不连续的情况):
方法一:(id大于法——利用自增id大于前20条记录中的自增id最大者)
select top 10 * from Table_1 where id > ( select max(id) from ( select top 20 id from Table_1 order by id ) as T )
1 2 3 4 5 6 7 8 | /*通用写法,PageSize表示每页记录数,PageIndex表示当前页码(页码从1开始)*/ <br> select top PageSize * from Table_1 where id > ( select max (id) from ( select top (PageIndex - 1) * PageSize id from Table_1 order by id ) as T ) |
方法二:(id "not in"法——利用自增id “not in”前20条记录中的所有自增id)
select top 10 * from Table_1 where id not in( select top 20 id from Table_1 )
方法三:(id颠倒法——利用自增id,先颠倒前30条记录,再取这30条记录中的前10条)
select top 10 * from (select top 30 * from Table_1 order by id /*这里order by必须写上*/ ) as T order by T.id desc /*这里order by必须写上*/
/*将方法三的结果集转成以自增id顺序排列的形式*/ select * from( select top 10 * from (select top 30 * from Table_1 order by id /*这里order by必须写上*/ ) as T order by T.id desc /*这里order by必须写上*/ ) as TT order by TT.id
方法四:(利用ROW_NUMBER()函数)
select * from( select *, ROW_NUMBER() over (order by id) as rank from Table_1 ) as T where T.rank between 21 and 30
1 2 3 4 5 6 | /*通用写法,PageSize表示每页记录数,PageIndex表示当前页码(页码从1开始)*/ select * from ( select *, ROW_NUMBER() over ( order by id) as rank from Table_1 ) as T where T.rank between ((PageIndex - 1) * PageSize) + 1 and PageIndex * PageSize |
方法五:(利用id "in",和方法三有点类似只是绕了一点)
select top 10 * from Table_1 where id in( select top 10 id from( select top 30 id from Table_1 order by id ) as T order by T.id desc ) order by id
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET开发智能桌面机器人:用.NET IoT库编写驱动控制两个屏幕
· 用纯.NET开发并制作一个智能桌面机器人:从.NET IoT入门开始
· 一个超经典 WinForm,WPF 卡死问题的终极反思
· ASP.NET Core - 日志记录系统(二)
· .NET 依赖注入中的 Captive Dependency
· 在外漂泊的这几年总结和感悟,展望未来
· 博客园 & 1Panel 联合终身会员上线
· 支付宝事故这事儿,凭什么又是程序员背锅?有没有可能是这样的...
· https证书一键自动续期,帮你解放90天限制
· 在 ASP.NET Core WebAPI如何实现版本控制?