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]
  ) as b where RowId between 1 and 5;

结果:

(2)取第二页数据

  select * from (
    select *, ROW_NUMBER() OVER(Order by ID ) AS RowId from [mydb].[dbo].[user]
  ) as b where 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
) AS A
) as B
where 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
) as A
) as B where B.RowId>5;

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

SQLServer常用分页方式的更多相关文章

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

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

  2. sqlserver的四种分页方式

    第一种:ROW_NUMBER() OVER()方式 select * from ( select *, ROW_NUMBER() OVER(Order by ArtistId ) AS RowId f ...

  3. Oracle、MySql、SQLServer数据分页查询

    看过此博文后Oracle.MySql.SQLServer 数据分页查询,在根据公司的RegionRes表格做出了 SQLserver的分页查询语句: 别名.字段 FROM( SELECT row_nu ...

  4. jQuery中ajax的4种常用请求方式

    jQuery中ajax的4种常用请求方式: 1.$.ajax()返回其创建的 XMLHttpRequest 对象. $.ajax() 只有一个参数:参数 key/value 对象,包含各配置及回调函数 ...

  5. iOS代码加密常用加密方式

    iOS代码加密常用加密方式 iOS代码加密常用加密方式,常见的iOS代码加密常用加密方式算法包括MD5加密.AES加密.BASE64加密,三大算法iOS代码加密是如何进行加密的,且看下文 MD5 iO ...

  6. DataGridView 中添加CheckBox和常用处理方式 .

    DataGridView 中添加CheckBox和常用处理方式 文章1 转载:http://blog.csdn.net/pinkey1987/article/details/5267934 DataG ...

  7. Entity Framework后台采用分页方式取数据与AspNetPager控件的使用

    本文是一个对AspNetPager控件使用的笔记! 有关AspNetPager控件可以查看杨涛主页.这是一个开放的自定义ASP.NET控件,支持各种自定义的数据分页方式,使用很方便,而且功能也很强大, ...

  8. [转]几种常见SQL分页方式

    创建环境: create table pagetest ( id ,) not null, col01 int null, col02 ) null, col03 datetime null ) -- ...

  9. PHP+jQuery 长文章分页类 ( 支持 url / ajax 分页方式 )

    /* ******* 环境:Apache2.2.8 ( 2.2.17 ) + PHP5.2.6 ( 5.3.3 ) + MySQL5.0.51b ( 5.5.8 ) + jQuery-1.8 **** ...

随机推荐

  1. HTTP之Content-Type

    前言:HTTP/1.1 HTTP/1.1 协议规定的 HTTP 请求方法有OPTIONS.GET.HEAD.POST.PUT.DELETE.TRACE.CONNECT 这几种. 其中 POST 一般用 ...

  2. Go-day01

    Go-实现hello_world package main import "fmt" func main() { fmt.Println("hello world!&qu ...

  3. mysql 将一张表的数据更新到另外一张表中

    update 更新表 set 字段 = (select 参考数据 from 参考表 where  参考表.id = 更新表.id); update table_2 m  set m.column = ...

  4. puppeteer,新款headless chrome

    puppeteer puppeteer是一种谷歌开发的Headless Chrome,因为puppeteer的出现,业内许多自动化测试库停止维护,比如PhantomJS,Selenium IDE fo ...

  5. 设计模式---接口隔离模式之中介者模式(Mediator)

    一:概念 在Mediator模式中,类之间的交互行为被统一放在Mediator的对象中,对象通过Mediator对象同其他对象交互.Mediator对象起到控制器的作用 二:动机 在软件构建的过程中, ...

  6. Hadoop记录-安装ambari hdp集群

    #!/bin/sh #配置用户sudo权限(参考/etc/sudoers文件,在/etc/sudoers.d/新建一个用户配置文件,注意要注销) #需要在/etc/sudoers末尾追加:sfapp ...

  7. Bootstrap模态框修改出现的位置和大小

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  8. 他山之石--机器学习 step by step

    练习使用的数据 diabetes.csv 备用百度网盘地址 输入变量与输出变量均为连续变量的预测问题是回归问题: 输出变量为有限个离散变量的预测问题成为分类问题: 其实回归问题和分类问题的本质一样,都 ...

  9. 【转】javascript代码混淆和压缩

    隐藏 JavaScript 源代码?不,你只能混淆和压缩JavaScript源代码 http://www.yaohaixiao.com/tools/confuse-and-compressing-ja ...

  10. mysql 约束和外键约束实例

    1.约束保证数据的完整性和一致性. 2.约束分为表级约束和列级约束.(根据约束所针对的字段的数目的多少来决定) 列级约束:对一个数据列建立的约束 表级约束:对多个数据列建立的约束 列级约束即可以在列定 ...