Sql 分页三种方式

Posted &‘米粒

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Sql 分页三种方式相关的知识,希望对你有一定的参考价值。

create database Test
go
use Test
go

create Table UserInfo(
    userid int identity(1,1) primary key,
    username nvarchar(10) not null
    
)

insert into UserInfo values (\'a11\')
insert into UserInfo values (\'a12\')
insert into UserInfo values (\'a13\')
insert into UserInfo values (\'a14\')
insert into UserInfo values (\'a15\')
insert into UserInfo values (\'a16\')
insert into UserInfo values (\'a17\')


select * from UserInfo

declare @pagesize int
declare @currentPage int
set @pagesize = 3
set @currentPage = 3

select top (@pagesize) * from Userinfo 
where userid 
not in(
select top 
(@pagesize*(@currentPage-1))
 userid
 from UserInfo) 
  
 
--第一页:因为不需要对数据过滤,
--所以只取PagSize数量的记录

--第二页:步骤:
--1.取前两页的数据 selct top @pagesize *@currentPage
--2.过滤掉第一页的数据 


--第二种方法:如果ID是连续,完全不用top
--直接用id就可以

create table #tempUserInfo
(
    id int identity(1,1) primary key,
    userid int not null,
    username nvarchar(10) not null
)

insert into #tempUserInfo 
select * from UserInfo

declare @pagesize int
declare @currentPage int
set @pagesize = 3
set @currentPage = 2
select * from #tempUserInfo
where id between 
(@currentPage -1)*@pagesize +1 
and @pagesize * @currentPage



--第三种
--rownumber()函数是sql server2005才有
declare @pagesize int
declare @currentPage int
set @pagesize = 3
set @currentPage = 3
select * from (select ROW_NUMBER() over (order by userid) as HangHao,
* 
from UserInfo) pageduserinfo
where HangHao between 
(@currentPage -1)*@pagesize +1 
and @pagesize * @currentPage
--效率问题:第一张绝对比第三种低。
--理论上第二种效率最高,但不推荐用,
--要实现的话,一般是用存储过程

--个人推荐:用第三种方式
--SqlServer:ROwNumber
--mysql:limit
--Oracle :序列:Sequence
View Code

 

  public List<Xml_Parameters> BuildTaskXML(string sAccount, int pageNum,int pageSize = 20)
    {
        return  BulidTaskXMLC(sAccount).Skip(pageSize * (pageNum - 1)).Take(pageSize).ToList();

    }

 

以上是关于Sql 分页三种方式的主要内容,如果未能解决你的问题,请参考以下文章

常见的三种SQL分页方式

Sqlserver 数据库分页查询(三种方式)

mybatis动态sql片段与分页,排序,传参的使用

SQL分页的几种方法

java分页

递归算法+sql三种分页