mysql的分页是基于limit关键字,oracle的分页是基于rownum行号,SQLserver的分页在下面进行研究,是基于SQLServer2012进行的测试。

0.原来的SQL的所有数据

下面的测试假设每页都是取5条数据。

1.第一种-ROW_NUMBER() OVER()方式(over函数必须有)

(1)取第一页数据

select * from(select *, ROW_NUMBER() OVER(Order by ID ) AS RowId from [mydb].[dbo].[user])asbwhere RowId between 1 and 5;

结果:

(2)取第二页数据

select * from(select *, ROW_NUMBER() OVER(Order by ID ) AS RowId from [mydb].[dbo].[user])asbwhere RowId between 6 and 10;

结果:

总结:  这种方式采用    RowId BETWEEN 当前页数-1*页大小+1  and 页数*页大小   ,而且包含起始值与结束值。

补充:这种方式的通用写法如下: 原来SQL不能带order by ,但是可以带条件。

原来SQL =     select * from [mydb].[dbo].[user] where name like 'name%'

拼接分页的模板如下:

select * from(select *, ROW_NUMBER() OVER(Order by ID ) AS RowId from(

原来SQL

)ASA

)asBwhere RowId between 1 and 5;

2.第二种-offset start fetch next page rows only

(1)取第一页

select * from [mydb].[dbo].[user] order by ID offset 0 rows fetch next 5 rows only;

结果:

(2)取第二页

select * from [mydb].[dbo].[user] order by ID offset 5 rows fetch next 5 rows only;

结果:

总结:这种方式的起始值与结束值计算方式:offset 页号*页大小 rows fetch next 页大小 rows only

3.第三种: top 关键字

(1)取第一页

select top 5 * from [mydb].[dbo].[user]

where ID not in (select top 0 ID from [mydb].[dbo].[user]);

结果:

(2)取第二页

select top 5 * from [mydb].[dbo].[user]

where ID not in (select top 5 ID from [mydb].[dbo].[user]);

结果:

总结:这种方式只用改内层的 top就可以了:  内层的top后面相当于起始值,计算方式为  (页号-1)*页大小。

补充:这种分页方式的通用模板如下: 这个可以加order by和条件

原来SQL = select * from [mydb].[dbo].[user] where name like 'name%'

select top 5 * from(

原来SQL

)AS A where ID not in (select top 5 ID from [mydb].[dbo].[user]);

4.ROW_NUMBER() + top 相当于上面1和3的结合使用

(1)取第一页

select top (5) * from (select *, ROW_NUMBER() OVER(Order by ID ) AS RowId from [mydb].[dbo].[user]) as A where A.RowId>0;

结果:

(2)取第二页

select top (5) * from (select *, ROW_NUMBER() OVER(Order by ID ) AS RowId from [mydb].[dbo].[user]) as A where A.RowId>5;

结果:

总结:这种方式比较通用, 第一个 top 里面的值 相当于 页大小,第二个rowID>起始值,起始值计算方式为  (页号-1)*页大小

补充:这种分页方式的通用模板如下: 这种方式原来的SQL也不用加排序语句

原来SQL = select * from [mydb].[dbo].[user] where name like 'name%'

select top (5) * from(select *, ROW_NUMBER() OVER(Order by ID ) AS RowId from(

原来SQL

)asA

)as B where B.RowId>5;

注意:文中SQLServer的AS A这些起别名不能省略。

mysql sqlserver分页_SQLServer常用分页方式相关推荐

  1. c3p0对mysql配置_c3p0的常用配置方式

    1:第一种方式非常简单 c3p0.driverClass=com.mysql.jdbc.Driverc3p0.jdbcUrl=jdbc:mysql://localhost:3308/databasec ...

  2. mysql sqlserver 拷贝_SQLServer复制搭建过程

    一次偶然的机会,碰到了传说中的SQL Server数据库,要做迁移.而我本人对于SQL Server来说一窍不通.于是就按照自己对Mysql.oracle的了解来做,于是就先做复制,然后如果有延迟,就 ...

  3. sql server与oracle的分页,详解SQLServer和Oracle的分页查询

    不管是DRP中的分页查询代码的实现还是面试题中看到的关于分页查询的考察,都给我一个提示:分页查询是重要的.当数据量大的时候是必须考虑的.之前一直没有花时间停下来好好总结这里.现在又将Oracle视频中 ...

  4. sqlserver实现分页的几种方式

    sqlserver实现分页的几种方式 第一种:使用org.springframework.data.domain.Page来进行分页 package com.cellstrain.icell.repo ...

  5. 一对多分页查询mysql编写_一对多分页的SQL到底应该怎么写?

    1. 前言 MySQL一对多的数据分页是非常常见的需求,比如我们要查询商品和商品的图片信息.但是很多人会在这里遇到分页的误区,得到不正确的结果.今天就来分析并解决这个问题. 2. 问题分析 我们先创建 ...

  6. mybatis常用分页插件,快速分页处理

    在未分享整个查询分页的执行代码之前,先了解一下执行流程. 1.总体上是利用mybatis的插件拦截器,在sql执行之前拦截,为查询语句加上limit X X 2.用一个Page对象,贯穿整个执行流程, ...

  7. mybatis实现分页的几种方式

    本文目录 借助数组进行分页 借助Sql语句进行分页 拦截器分页 RowBounds实现分页 借助数组进行分页 原理:进行数据库查询操作时,获取到数据库中所有满足条件的记录,保存在应用的临时数组中,再通 ...

  8. mysql 分页 不连续_mysql分页的问题

    用过mysql的人肯定知道,mysql提供了原生的分页功能-----LIMIT关键字.LIMIT 子句可以被用于强制 SELECT 语句返回指定的记录数.LIMIT 接受一个或两个数字参数.参数必须是 ...

  9. MyBatis Plus分页插件常用配置

    版权声明 本文原创作者:谷哥的小弟 作者博客地址:http://blog.csdn.net/lfdfhl 配置详情 MyBatis Plus分页插件常用配置如下: import com.baomido ...

最新文章

  1. 华硕笔记本电池0%充不进电_笔记本电脑电池充不进电如何解决【解决方法】
  2. Redis安装异常解决办法
  3. ORA-01722: invalid number
  4. mysql 批量远程_【shell--批量远程MySQL,执行命令】-【工作总结】
  5. anaconda base环境_如何在最新版的Anaconda下安装Tensorflow 1.9
  6. 解决:The ‘Access-Control-Allow-Origin‘ header contains multiple values‘x, *‘, but only one is allowed.
  7. STM32F7xx —— ADC
  8. 传统动态代理实现计算器类日志功能
  9. 17. GD32F103C8T6入门教程-adc 使用教程2-dma+连续扫描方式采集数据++dma中断通知
  10. token会被截取吗_新手剪辑:如何截取视频的某个片段?
  11. 自适应滤波器设计及matlab实现,[转载]自适应滤波器设计与MATLAB
  12. vue加载中展示【nprogress(进度条)Lottie(动画)】
  13. CHD安装Hadoop
  14. 程序媛们,女神节快乐~
  15. 课堂派“互动课件”文件下载
  16. 虚幻蓝图实现只狼的钩索系统(2)-射线检测
  17. 岭南师范学院专插本计算机,2020年岭南师范学院专插本招生计划出来了,共招250人...
  18. 《Python编程从入门到实践》学习笔记7:用户输入和while循环
  19. 丁鹿学堂:前端进阶学习vue3最新教程之vue的单文件组件深入理解
  20. Excel技能之图表,会Excel就能碾压程序员

热门文章

  1. [shell] if else以及大于、小于、等于逻辑表达式
  2. 智能骨传导眼镜vue_穿戴设备迎新机遇,智能音频眼镜或将是下一个风口
  3. encoder decoder模型_如何突破Decoder性能瓶颈?揭秘FasterTransformer的原理与应用
  4. 得到不小于x的最小的2的幂
  5. 子窗口关闭,父窗口有选择刷新
  6. Redis集群的基本配置
  7. 用FlashBoot轻松制作瑞星杀毒U盘!
  8. Java和JavaScript区别与联系
  9. java中文件选择对话框
  10. 一文带你 API 网关从入门到放弃