欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

【转载】Sqlserver的SQL语句实现分页查询

程序员文章站 2022-08-10 10:49:45
在应用程序的开发中,如果数据库中的数据量过于的庞大,则需要针对查询数据做分页处理,取出对应分页中的数据,在Sqlserver分页的语句写法中,有两种比较常用,一种是数据表中含有自增量Id的情况,可以根据Id的大小顺序进行分页,另一种是数据库中不存在Int类型的Id的情况,此时就需要通过Row_Num ......

在应用程序的开发中,如果数据库中的数据量过于的庞大,则需要针对查询数据做分页处理,取出对应分页中的数据,在sqlserver分页的语句写法中,有两种比较常用,一种是数据表中含有自增量id的情况,可以根据id的大小顺序进行分页,另一种是数据库中不存在int类型的id的情况,此时就需要通过row_number函数来实现分页。

(1)数据表中存在自增量id的情况

假设我们查询的表名称为student,包含的字段有:id(id号,自增变量)、name(姓名)、birthday(出生日期)。按出生日期从早到晚排序,获取排序后第31到60个学生的信息,语句可以使用select top的方式书写。具体如下:

select top 30 * from student where id not in (select top 30 from student order by birthday) order by birthday

如果是获取第91到120排位的学生的话,则是下列语句。

select top 30 * from student where id not in (select top 90 from student order by birthday) order by birthday

(2)数据表中不存在id的情况

此种情况不可能再使用top来排序了,可使用row_number进行排序后再筛选对应的值。

更改上述的student表的结构为:studentcode(文本类型,非数字)、name(姓名)、birthday(出生日期)。按出生日期从早到晚排序,获取排序后第31到60个学生的信息,此时的sql语句为:

with temptb as
(
   select row_number() over(order by birthday asc) as rownumber,* from student
)
select * from temptb where rownumber>30 and rownumber<=60

在临时表temptb中使用了row_number() over来获取排序后的序号,over里面为排序的规则。

 

备注:此文章转载自博主个人技术站点,博主个人站致力于分享相关技术文章,同时也分享windows服务器和linux服务器运维等知识:it技术小趣屋

转载请标明出处。