SQL 数据分页查询
最近学习了一下SQL的分页查询,总结了以下几种方法。
首先建立了一个表,随意插入的一些测试数据,表结构和数据如下图:

现在假设我们要做的是每页5条数据,而现在我们要取第三页的数据。(数据太少,就每页5条了)
方法一:
select top 5 *
from [StuDB].[dbo].[ScoreInfo]
where [SID] not in
(select top 10 [SID]
from [StuDB].[dbo].[ScoreInfo]
order by [SID])
order by [SID]
结果:

此方法是先取出前10条的SID(前两页),排除前10条数据的SID,然后在剩下的数据里面取出前5条数据。
缺点就是它会遍历表中所有数据两次,数据量大时性能不好。
方法二:
select top 5 *
from [StuDB].[dbo].[ScoreInfo]
where [SID]>
(select MAX(t.[SID]) from (select top 10 [SID] from [StuDB].[dbo].[ScoreInfo] order by [SID]) t )
order by [SID]
结果:

此方法是先取出前10条数据的SID,然后取出SID的最大值,再从数据里面取出 大于 前10条SID的最大值 的前5条数据。
缺点是性能比较差,和方法一大同小异。
方法三:
select *
from (select *,ROW_NUMBER() over(order by [SID]) ROW_ID from [StuDB].[dbo].[ScoreInfo]) t
where t.[SID] between (5*(3-1)+1) and 5*3
结果:

此方法的特点就是使用 ROW_NUMBER() 函数,这个方法性能比前两种方法要好,只会遍历一次所有的数据。适用于Sql Server 2000之后的版本(不含)。
方法四:
select *
from [StuDB].[dbo].[ScoreInfo]
order by [SID]
offset 5*2 rows fetch next 5 rows only
结果:

此方法适用于Sql Server 2008之后的版本(不含)。
offset 10 rows fetch next 5 rows only 这句代码我的理解是:跳过前面10条数据(前2页)从下一条开始取5条数据。
个人感觉这个方法比使用 ROW_NUMBER() 函数的方法要好(从代码方面来看,代码也少很多),至于性能方面没有做过测试,就不说了。
不过,最后两种方法的性能肯定是远超前面两种方法的,具体的还是看实用。
SQL 数据分页查询的更多相关文章
- [.NET] SQL数据分页查询
[.NET] SQL数据分页查询 程序下载 范例下载:点此下载 原始码下载:点此下载 NuGet封装:点此下载 数据查询 开发系统时,使用C#执行SQL查询指令,就可以从SQL数据库里查询所需数据. ...
- SQL Server 数据分页查询
最近学习了一下SQL的分页查询,总结了以下几种方法. 首先建立了一个表,随意插入的一些测试数据,表结构和数据如下图: 现在假设我们要做的是每页5条数据,而现在我们要取第三页的数据.(数据太少,就每页5 ...
- Oracle、MySql、SQLServer 数据分页查询
最近简单的对oracle,mysql,sqlserver2005的数据分页查询作了研究,把各自的查询的语句贴出来供大家学习..... (一). mysql的分页查询 mysql的分页查询是最简单的,借 ...
- Oracle/MySql/SQL Sqlserver分页查询
简述 简单概括一下Oracle,MySql,SQL Sqlserver这三个数据库的分页查询语句. Oracle分页查询 例:每页显示两条数据,现在要查询第二页,也就是第3-4条数据. 查询语句: s ...
- 转Oracle、MySql、SQLServer 数据分页查询
最近简单的对oracle,mysql,sqlserver2005的数据分页查询作了研究,把各自的查询的语句贴出来供大家学习..... (一). mysql的分页查询 mysql的分页查询是最简单的,借 ...
- Oracle、MySql、SQLServer数据分页查询
看过此博文后Oracle.MySql.SQLServer 数据分页查询,在根据公司的RegionRes表格做出了 SQLserver的分页查询语句: 别名.字段 FROM( SELECT row_nu ...
- oracle (6)---SQL 数据关联查询
SQL 数据关联查询 Structure Query Language 从多(n)张表查询对应记录信息,必须有至少n-1个关联条件,否则会出现笛卡尔积的情况.1. 等值连接:没有连接关系的数据不会被查 ...
- SQL Server分页查询方法整理
SQL Server数据库分页查询一直是SQL Server的短板,闲来无事,想出几种方法,假设有表ARTICLE,字段ID.YEAR...(其他省略),数据53210条(客户真实数据,量不大),分页 ...
- sql server分页查询
1.引言 在列表查询时由于数据量非常多,一次性查出来会非常慢,就算一次查出来了,也不能一次性显示给客户端,所以要把数据进行分批查询出来,每页显示一定量的数据,这就是数据要分页. 2.常用的数据分页方法 ...
随机推荐
- VirtualBox使用总结
解决VirtualBox安装Mac OS X El Capitan开机卡住问题 在配置完新虚拟机后关闭VirtualBox,用管理员权限启动CMD,转到VirtualBox安装目录,依次运行下列指令: ...
- Leetcode N-Queens II
Follow up for N-Queens problem. Now, instead outputting board configurations, return the total numbe ...
- JS:callee属性
函数内部属性:在函数内部,有两个特殊的对象:arguments和this. arguments有一个callee属性,该属性是一个指针,指向拥有这个arguments对象的函数. function f ...
- 【JAVA】FOR UPDATE 和 FOR UPDATE NOWAIT 区别 (转)
1.for update 和 for update nowait 的区别:首先一点,如果只是select 的话,Oracle是不会加任何锁的,也就是Oracle对 select 读到的数据不会有任何限 ...
- BZOJ2527: [Poi2011]Meteors
补一发题解.. 整体二分这个东西,一开始感觉复杂度不是很靠谱的样子 问了po姐姐,说套主定理硬干.. #include<bits/stdc++.h> #define ll long lon ...
- 更换app开发者账号
在开源中国上面有一个答案,http://www.oschina.net/question/2307266_237220 下面是我的执行步骤 首先在iTunes Connect中找到要更换开发者账号的a ...
- MongoDB-3.2.6 副本集 和主从
yum实例 vim /etc/yum.repos.d/mongodb-org-3.2.repo [mongodb-org-3.2] name=Mongodb baseurl=http://repo.m ...
- canvas绘制二次贝塞尔曲线----演示二次贝塞尔四个参数的作用
canvas中绘制二次贝塞尔曲线的方法为ctx.quadraticCurveTo(x1,y1,x2,y2); 四个参数分别为两个控制点的坐标.开始点即当前canvas中目前的点,如果想从指定的点开始, ...
- hadoop意外之旅--巧合遇到一只大象
公司面临转型,所有开发也难免面临转型,开始选择自己想要走的方向进行研究. 说来也巧合,最近正好说搭个hadoop环境玩玩,结果遇到转型还被选为大数据小组组长.(尴尬) 开始一场遇到大象之旅,希望能在这 ...
- 获取打开指定Action的所有应用包名
获取打开指定功能的所有应用:发消息,分享等等. 如打开网页,下面代码即可查看所有的浏览器 //查找所有浏览器 private void queryPackage() { PackageManager ...