【转载】Sqlserver的SQL语句实现分页查询
在应用程序的开发中,如果数据库中的数据量过于的庞大,则需要针对查询数据做分页处理,取出对应分页中的数据,在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技术小趣屋。
转载请标明出处。