第一句子大全,网罗天下好句子,好文章尽在本站!

SQL SERVER读取指定区间数据 实现高效分页语句

时间:2023-12-23

例如:select * from 18年考试成绩 order by 姓名 asc,学号 asc offset 10 rows fetch next 10 rows only这语句的意思是以字段姓名升序

友情提示:本文共有 1516 个字,阅读大概需要 4 分钟。

些方法适用于SQL SERVER2012及以后版本

示例:

有如下一个数据表,一共35条数据,

如果要取区间11-20条的记录,按学号排序,注意:如果没有自动编号字段,务必找数据没有重复的字段排序,比如身份证号,手机号等,如果找不到单个不重复的字段,那么可以多字段排序以保不影响查询结果。例如:

select * from [18年考试成绩] order by [姓名] asc,[学号] asc offset 10 rows fetch next 10 rows only

这语句的意思是以字段“姓名”升序为第一排序,“学号”字段升序为第二排序,(一般情况下学号是不复复的字段,直接使用学号做排序就可以,无需要多个排序字段,这里只是演示说明,必要时可以多字段排序)

offset 10 rows的意思是从开始往下移动10行,fetch next 10 rows only意思从下一行开始获取10行的记录数据,就是获取11-20条记录。

如果要实现分页显示,需要把offset数值和next数值代入变量就可以了

首先要获取数据表的总记录数

select count(姓名) as 总记录数 from [18年考试成绩]

本例中如果设定每页显示8条数据,那么一共需要5页,在计算页数的时候有一个要注意的问题,如果字段为整数型小数是会自动舍去,无法获取正常的页数,比如count(姓名)获得总记录数,再除以8显示的结果是4,实际应该是35/8=4.375,为了防止掉入这些坑,应该在count(姓名)后面乘一个带小数的1.0。

select count(姓名)*1.0/8 as 分页总数 from [18年考试成绩],这样将能得到完整的小数

然后再使用SQL向上取整函数Ceiling,得到需要的总页数

select Ceiling(count(姓名)*1.0/8) as 分页总数 from [18年考试成绩]

知道了总记录数,设置好每页显示的记录数,得出了总页数,这样就可以实现完整的分页显示功能了

显示指定页:

select * from [18年考试成绩] order by [姓名] offset 每页显示的数量的变量*(要显示的页数的变量-1) rows fetch next 每页显示的数量的变量 rows only

如本例,要显示第3页的8条数据

select * from [18年考试成绩] order by [姓名] offset 8*(3-1) rows fetch next 8 rows only

显示第一页除了可以使用上面的方法也可以直接使用TOP方法

select top 8 * from [18年考试成绩] order by [姓名]

select * from [18年考试成绩] order by [姓名] offset 8*(1-1) rows fetch next 8 rows only

上面两条语句都可以直接显示第一页

显示最后一页也是直接使用指定页的方法就可以,只需要把要显示的页数直接设置为总页数

select * from [18年考试成绩] order by [姓名] offset 每页显示的数量的变量*(总页数的变量-1) rows fetch next 每页显示的数量的变量 rows only

如本例,显示最后一页

select * from [18年考试成绩] order by [姓名] offset 8*(5-1) rows fetch next 8 rows only

上一页和下一页都直接把要显示的页数变量加减1就可以了,但在这之前要加一个判断,当前是不是已经是第一页或最后一页,根据变量的所在页变量判断就可以了。

本文如果对你有帮助,请点赞收藏《SQL SERVER读取指定区间数据 实现高效分页语句》,同时在此感谢原作者。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。
显示评论内容(5)
  1. 你是我的傻瓜丶2024-01-15 15:13你是我的傻瓜丶[山东省网友]203.5.8.77
    看起来使用SQL+SERVER做分页查询会很方便呢。
    顶3踩0
  2. 沙洲2024-01-10 22:31沙洲[天津市网友]219.82.48.157
    @ヤしヾSQL+SERVER的功能越来越全面了,真是不错。
    顶6踩0
  3. ヤしヾ2024-01-06 05:49ヤしヾ[澳门网友]140.237.212.241
    实现了高效分页,查询速度应该会快很多。
    顶0踩0
  4. 繁孤陌恙2024-01-01 13:07繁孤陌恙[新疆网友]61.47.177.184
    @潇湘阡陌SQL+SERVER果然强大,分页查询也能这么简单。
    顶1踩0
  5. 潇湘阡陌2023-12-27 20:25潇湘阡陌[甘肃省网友]203.12.65.127
    这个功能太赞了,可以提高查询效率。
    顶0踩0
相关阅读
怎样用SQL语句在SQL Server中进行创建表 修改 删除表的数据

怎样用SQL语句在SQL Server中进行创建表 修改 删除表的数据

...在SQL Server中进行创建表、修改表、删除表,向表中添加数据,修改数据及删除数据。SQL语句创建表创建一个餐桌表--主键--餐桌的编号--餐桌的描述信息--餐桌的备注--标志 0--空闲的 1---使用的 2 预定的--餐桌的创建时间create ta...

2023-05-09 #经典句子

NET开发-在SQL Server中使用不带条件和带条件的SQL语句更新数据

NET开发-在SQL Server中使用不带条件和带条件的SQL语句更新数据

...您需要修改密码,更改收货地址等,这些需求在SQL Server数据库中都属于更新数据操作,使用新的数据替换掉原来的数据。我们都知道,数据是存储在SQL Server数据库表中的,在不更新数据的情况下,一般都是获取数据,然后通过C...

2023-12-16 #经典句子

好文推荐:Mysql基础复习

好文推荐:Mysql基础复习

...ax_id指向ReadView中的已经创建的最大事务ID)如果落在绿色区间(DB_TRX_ID < min_id):这个版本比min_id还小(事务ID是从小往大顺序生成的),说明这个版本在SELECT之前就已经提交了,所以这个数据是可见的。或者(这里是短路或,...

2013-05-31 #经典句子

mysql基础之sql语句分类及实际中的用途

mysql基础之sql语句分类及实际中的用途

...语言(Structured Query Language)简称SQL,结构化查询语言是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。说白了sql语句就是操作数据库的语言,sql语句从作用上来分可以分为下面四类。一、数...

2023-10-07 #经典句子

SQL数据库及SQL语言是什么?

SQL数据库及SQL语言是什么?

本文将着重针对MySQL数据库的基础知识以及操作进行详细的介绍。数据库是什么?之前小编在这个问题上详细讲述过(详见《数据库》),和现实生活中的各类仓库一样,数据库就是网络上用来存放数据的地方,用户可以对这些...

2023-05-08 #经典句子

sql增删改查基本语法

sql增删改查基本语法

一、增:有2种方法;1.使用insert插入单行数据:语法:insert [into] [列名] values ;例:insert into Strdents (姓名,性别,出生日期) values ("王伟华","男","1983/6/15")注意:如果省略表名,将依次插入所有列;2.使用insert,select语句将现有表中的 数...

2017-07-27 #经典句子

怎么用条码软件SQL语句同时筛选Exce两列数据打印

怎么用条码软件SQL语句同时筛选Exce两列数据打印

...大家介绍过利用中琅条码软件的SQL语句筛选打印Excel单列数据进行批量打印,今天就给大家介绍一下如何同时筛选Excel表中的两列数据进行批量打印,即把Excel数据中的两列数据同时满足相应条件的数据打印出来,如下图,学生姓...

2022-10-23 #经典句子

面试官问你MyBatis SQL是如何执行的?把这篇文章甩给他

面试官问你MyBatis SQL是如何执行的?把这篇文章甩给他

...简单的 XML 和注解配置规则。使 Map 接口和 POJO 类映射到数据库字段和记录。MyBatis 的特点那么 MyBatis 具有什么特点呢?或许我们可以从如下几个方面来描述MyBatis 中的 SQL 语句和主要业务代码分离,我们一般会把 MyBatis 中的 SQL 语...

2011-04-25 #经典句子