首页 >

mysql查询记录倒叙,如何将数据库中查询出来的数据再进行分页操作 – 数据库 – 前端,mysql中loop与if

mysql写入数据,mysql中的undo,mysql 触发器 查询,mysql算总数的和,网页接入mysql,mysql中loop与ifmysql查询记录倒叙,如何将数据库中查询出来的数据再进行分页操作 - 数据库 - 前端,mysql中loop与if

从MSSQL2005开始,SQL Server提供了一个内置函数ROW_NUMBER,这是一个非常神奇的函数。从MSSQL2012开始,SQL Server提供了offset方法进行分页。

今天大家就谈谈ROW_NUMBER和offset的语法和在分页中的应用。

ROW_NUMBER的含义及语法定义

ROW_NUMBER实现对结果集的输出进行编号。 具体来说,返回结果集分区内行的序列号,每个分区的第一行从 1 开始。

ROW_NUMBER ( ) OVER ( order_by_clause )order_by_clause: 子句可确定在特定分区中为行分配唯一 ROW_NUMBER 的顺序。 order by 子句是必选项。返回值:bigint。结果集分区内行的序列号。offset的含义及语法定义

offset是order by的子句,主要用来限定返回的行数,用来做分页也是很合适的。只是从MSSQL2012才开始支持。语法结构如下:

FETCH { NEXT } { integer_constant | fetch_row_count_expression } { ROWS } ONLY

fetch_row_count_expression 可以是变量、参数或常量标量子查询。 在使用子查询时,它无法引用在外部查询范围中定义的任何列。也就是说,它无法与外部查询相关联。

结合到分页,语法语法:

offset startPage rows fetch next pageSize rows only

其中起始页面:startPage=(@page-1)*@rows,页面大小:pageSize=@rows

演示数据准备

演示数据准备的代码偶就不粘贴了,直接看下图:

使用ROW_NUMBER分页

比如大家希望按照业务员+销售区域排序后,每4条记录一页显示,语法如下:

declare @pagesize int =4;–每页记录数declare @pagenum int =1;–第几页with saledata as (select row_number() over(order by FName,FDistrict) as FRowIndex,* from @sale)select * from saledata where FRowIndex between @pagesize*(@pagenum-1)+1 and @pagenum*@pagesize;使用OFFSET实现分页

重复的代码部分不再赘述,在查询时要注意,offset是Order By的子句,不能独立存在。语法结构如下:

select * from @saleorder by FName,FDistrictoffset (@pagenum-1)*@pagesize rows fetch next @pagesize rows only

返回的结果与使用row_number是一致的。完整的测试脚本参看下图:

希望能解决题主所提的问题!


mysql查询记录倒叙,如何将数据库中查询出来的数据再进行分页操作 - 数据库 - 前端,mysql中loop与if
  • 高手们都是使用什么mysql的客户端 - 数据库 - 前端,mysql内存表 update
  • 高手们都是使用什么mysql的客户端 - 数据库 - 前端,mysql内存表 update | 高手们都是使用什么mysql的客户端 - 数据库 - 前端,mysql内存表 update ...

    mysql查询记录倒叙,如何将数据库中查询出来的数据再进行分页操作 - 数据库 - 前端,mysql中loop与if
  • access如何用VBA清除文本框里的文字 - 数据库 - 前端|
  • access如何用VBA清除文本框里的文字 - 数据库 - 前端| | access如何用VBA清除文本框里的文字 - 数据库 - 前端| ...

    mysql查询记录倒叙,如何将数据库中查询出来的数据再进行分页操作 - 数据库 - 前端,mysql中loop与if
  • 有没有一款真正开源的亚马逊erp系统 - 数据库 - 前端|
  • 有没有一款真正开源的亚马逊erp系统 - 数据库 - 前端| | 有没有一款真正开源的亚马逊erp系统 - 数据库 - 前端| ...