sql 两种分页offset和row_number简单分析

新建临时表字段id,向临时表里插入1,2,3,4,5,6

if object_id(‘tempdb..#test‘) is not null drop table #test
create table #test(id int)
insert into #test(id)values(1),(2),(3),(4),(5),(6)

declare @page int---当前页面
declare @rows int---页面大小
set @page=2
set @rows=3

---------当前页面为2,页面大小为3---则结果得到id(4,5,6)--------

(1)使用offset i rows fetch next j rows only 方式---i=(@page-1)*@rows,[email protected]
select t10.id from #test t10
order by t10.id--需要一个排序,否则分不了页
offset (@page-1)*@rows rows fetch next @rows rows only---offset的当前页面是从零开始

(2)使用row_number()函数得出新排序lineid,在用between 条件筛选页面

select t11.lineid,t11.id from (select cast(ROW_NUMBER() over (order by id asc) as int) lineid,id from #test) t11
where t11.lineid between (@page-1)*@rows+1 and @rows+(@page-1)*@rows+1
order by t11.line

结果如下:

时间: 2024-12-24 00:32:25

sql 两种分页offset和row_number简单分析的相关文章

MS SQL 两种分页

------ row number ---------- ------ row number ---------- declare @pageSize int,@pageIndex int set @pageSize = 20;set @pageIndex = 2 select * from ( SELECT ROW_NUMBER() OVER(ORDER BY Byod_ZZFP.ID DESC) as rowID ,Byod_ZZFP.* from Byod_ZZFP where 1=1 )

SQL两种简单分页查询方式

以前我们或许都用过了linq的skip and take方式进行分页查询,但是很少自己写sql的分页查询,因为大多数时候,我们都是在调用别人的方法. 最近看到一个文档,感觉方法里面实现的分页查询进入数据库调用的时候,实际最底层调用的还是SQL的分页查询,例如,我们用linq写个分页查询,转成sql表达式后发现: 实际调用的时候,才发现SQL底层是这样进行分页的. 下面,本文主要是介绍两种SQL的分页查询. 一,TOP方式 ----第一种分页查询方式:TOP方式 declare @page int

django-将数据库数据转换成JSON格式(ORM和SQL两种情况)

最近打算搞一个自动化运维平台,所以在看Django的知识. 在实际项目开发中,遇到一个小问题:前后端发生数据交互主流采用的是JSON.前端传数据到服务器端比较简单,稍微麻烦的是服务器端传JSON到前端. 首先数据是从数据库中获取的,Django默认使用的是ORM技术,但是作为一个运维人员,我其实比较反感这类抽象出来的API.因为尽管它对于开发人员来说,将数据库的表抽象成了一个对象,便于开发,不需要写SQL语句,但是这也是后期程序造成性能瓶颈的罪魁祸首(再做一次故障处理时,遇到一条70几行的SQL

关于php,mysql,html的数字分页和文本分页的两种分页样式供大家参考

请勿盗版,转载请加上出处http://blog.csdn.net/yanlintao1 请勿盗版,转载请加上出处http://blog.csdn.net/yanlintao1 首先进行样式展示希望对大家有所帮助,也希望大家给出意见和建议: 第一种:数字分页 第二种:为文本分页 php分页函数(我写在下面引入的common.inc.php公共文件中): /* *_page()分页的相关参数 *@param int $_pagesize 每页存有几个好友 *@param $_sql 获取所有字段 *

Hibeernate中的两种分页方式

1. return getHibernateTemplate().executeFind(new HibernateCallback() { public Object doInHibernate(Session s) throws HibernateException { Criteria c = s.createCriteria(AskOnline.class); c.add(Restrictions.eq("boardid", new Long(bid))); c.setFirs

lucene的两种分页操作

基于lucene的分页有两种: lucene3.5之前分页提供的方式为再查询方式(每次查询全部记录,然后取其中部分记录,这种方式用的最多),lucene官方的解释:由于我们的速度足够快.处理海量数据时,内存容易内存溢出.    lucene3.5以后提供一个searchAfter,这个是在特大数据量采用(亿级数据量),速度相对慢一点,像google搜索图片的时候,点击更多,然后再出来一批.这种方式就是把数据保存在缓存里面.然后再去取. 以下是再查询部分代码: /** * 这就是先查询所有的数据,

C和C#两种方式实现邮件的简单接收

本文的主要内容是通过两种方式实现简单邮件的接收,一种方式是通过C语言实现,另一种是通过C#实现的, 两种方式在实现上有许多的不同之处,但是本质上都是一样的. 一,C语言实现方式 C语言接收邮件的步骤: 1.创建TCP连接   端口:默认110 2.连接到Pop3服务器 服务器名称:例如"pop3.163.com" 3.认证登录      用户账号,密码 4.发送请求,接收服务端信息   send(...)  返回"+OK" a.获取邮箱中邮件的数量    "

bootstrap table两种分页需要的数据不同

先上原帖地址:http://blog.csdn.net/tyrant_800/article/details/50269723 问题描述: 调用$("#show_list_table").bootstrapTable("refresh");刷新table以后,搜索条件可以传入,也请求到了数据,但是就是不在table中展示数据. 最后发现是因为服务器端分页和客户端分页需要的json格式不一样. 原帖内容: 服务器分页/客户端分页的转换,table刷新 bootstra

sqlserver两种分页方法比较

-- 3000 page(从1开始) 10 pagesize -- 方法1(效率不高): SELECT TOP 10 * FROM [xxx].[oooo] WHERE id NOT IN (SELECT TOP (10*(3000-1)) id FROM [xxx].[oooo] ORDER BY createtime DESC)ORDER BY createtime DESC; 方法2(效率高): SELECT TOP 10 * FROM (SELECT ROW_NUMBER() OVER