SQL--实现分页查询
在查询数据中,对于某些数据量过大,为了减少页面上单页的加载时间,我们常常会选择分页查询,分页查询有很多方法,下面主要介绍两种分页方法。
一. 通过主键来实现分页:
1.数据库背景. Person表,ID主键盘,自增1,varchar行Name.
2.里面包含了10条数据。

3. 可以通过唯一ID,来进行分页.
Note:SELECT TOP((@PageIndex-1)*@PageSize) ID FROM Person 查询出前面所有的数据的ID. 然后父查询,通过NOT IN 将已经查询过的ID排除。
DECLARE @PageIndex int
DECLARE @PageSize int
SET @PageIndex=2
SET @PageSize=3
SELECT TOP(@PageSize) * FROM Person WITH(NOLOCK) WHERE ID NOT IN(SELECT TOP((@PageIndex-1)*@PageSize) ID FROM Person)
二.通过row_number() 来实现分页查询
1.不用主键也可以查询,通过row_number来为没一个查询的数据标记上行号,然后在所标记的行号上进行分组取行。
DECLARE @PageIndex int
DECLARE @PageSize int
SET @PageIndex=2
SET @PageSize=3
SELECT TOP(@PageSize) A.ID,A.Name FROM (SELECT row_number() over(order by id) as rownumber,* from Person WITH(NOLOCK)) A WHERE A.rownumber>((@PageIndex-1)*@PageSize)
三.小Tips
1.起初在写博客的时候,其实还想过另一种方法,不防可以提出来,大家来看看这段SQL.
SELECT TOP(@PageSize) * FROM Person WHERE ID >(SELECT TOP((@PageIndex-1)*@PageSize) MAX(ID) FROM Person)
2.下面是前面3个SQL执行的结果.

Note: 第三个sql是没有数据的。对于第三条sql,原理是先取出前面页数中最大的ID为maxID,然后取出ID大于MaxID的数据,取出前面的PageSize行,看起来的确没问题,可是最后一条数据都没有,这是为什么呢,问题出在了下面这半句Sql
SELECT TOP((@PageIndex-1)*@PageSize) MAX(ID) FROM Person
Note:因为ID是主键自己增加,在调用MAX(ID)的是其实区的是当前最大的ID. (对于当前情况MAX(ID)始终是10,所以没数据)
四.总结:
有关MAX(ID)还请了解这方面的解释一下为何是最大的ID.小弟也只是在写sql的时候发现的. 对原理不熟悉。求各位博友指点。
SQL--实现分页查询的更多相关文章
- SQL 数据分页查询
最近学习了一下SQL的分页查询,总结了以下几种方法. 首先建立了一个表,随意插入的一些测试数据,表结构和数据如下图: 现在假设我们要做的是每页5条数据,而现在我们要取第三页的数据.(数据太少,就每页5 ...
- [.NET] SQL数据分页查询
[.NET] SQL数据分页查询 程序下载 范例下载:点此下载 原始码下载:点此下载 NuGet封装:点此下载 数据查询 开发系统时,使用C#执行SQL查询指令,就可以从SQL数据库里查询所需数据. ...
- Oracle/MySql/SQL Sqlserver分页查询
简述 简单概括一下Oracle,MySql,SQL Sqlserver这三个数据库的分页查询语句. Oracle分页查询 例:每页显示两条数据,现在要查询第二页,也就是第3-4条数据. 查询语句: s ...
- SQL SERVER 分页查询
Sqlserver数据库分页查询一直是Sqlserver的短板. 但现在不是了. 自从有了它. 一口气上十楼. 官方语法说明示例: https://technet.microsoft.com/zh-c ...
- SQL Server分页查询方法整理
SQL Server数据库分页查询一直是SQL Server的短板,闲来无事,想出几种方法,假设有表ARTICLE,字段ID.YEAR...(其他省略),数据53210条(客户真实数据,量不大),分页 ...
- SQL Server分页查询进化史
分页查询一直SQL Server的一个硬伤,就是是经过一些进化,比起MySql的limit还是有一些差距. 一.条件过滤(适应用所有版本) 条件过滤的方法有很多,而思路就是利用集合的差集选择出目标集合 ...
- JPA或Hibernate中使用原生SQL实现分页查询、排序
发生背景:前端展示的数据需要来自A表和D表拼接,A表和D表根据A表的主键进行关联,D表的非主键字段关联C表的主键,根据条件筛选出符合的数据,并且根据A表的主键关联B表的主键(多主键)的条件,过滤A表中 ...
- SQL 存储过程 分页查询
ALTER PROCEDURE [dbo].[gzProc_TablePage] @tablename varchar(MAX),--表名 @selcolumn varchar(MAX),--查询字段 ...
- Oracle分页查询和SQL server分页查询总结
分页查询是项目中必不可少的一部分,难倒是不难,就是这些东西,长时间不用,就忘的一干二净了.今天特此总结一下这两款数据库分页查询的实现过程(只记录效率比较高的) 一.Oracle中的分页查询 1.通用分 ...
- SQL Server分页查询存储过程
--分页存储过程create PROCEDURE [dbo].[commonPagination]@columns varchar(500), --要显示的列名,用逗号隔开 @tableName va ...
随机推荐
- heX——基于 HTML5 和 Node.JS 开发桌面应用
heX 是网易有道团队的一个开源项目,允许你采用前端技术(HTML,CSS,JavaScript)开发桌面应用软件的跨平台解决方案.heX 是你开发桌面应用的一种新的选择,意在解决传统桌面应用开发中繁 ...
- Web前端开发工具总结
前端开发工具: web前端开发乃及其它的相关开发, 推荐sublime text, webstorm(jetbrains公司系列产品)这两个的原因在于,有个技术叫emmet, http://docs. ...
- 导入CSV格式的数据
导入CSV格式的数据 (参见http://dev.mysql.com/doc/refman/5.6/en/load-data.html) 1.数据库表(st_pptn_r) CREATE TABLE ...
- 【Leafletjs】5.L.Control 自定义一个Control
L.Control 所有leaflet控制的基础类.继承自IControl接口. 你可以这样添加控件: control.addTo(map); // the same as map.addContro ...
- Android压力测试工具——Monkey
Android压力测试工具——Monkey Monkey是运行在模拟器上和真机设备上的一段程序,它会产生用户事件的一系列伪随机流,比如点击.触摸.手势,还有很多系统级别的事件.Monkey通常是用来做 ...
- Canvas drawText实现中英文居中
@Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); Paint mTextPaint = new Paint( ...
- Android 从Gallery获取图片
本文主要介绍Android中从Gallery获取图片 设计项目布局 <LinearLayout xmlns:android="http://schemas.android.com/ap ...
- Android 显示意图激活另外一个Actitity
1.跳转到一个新的Actitity 新建项目, 新建一个java类OtherScreenActivity 继承自 Activity类 package com.wuyudong.twoactivity; ...
- 【代码笔记】iOS-侧滑效果
一,效果图. 二,工程图. 三,代码. AppDelegate.h #import <UIKit/UIKit.h> //加入头文件 #import "PPRevealSideVi ...
- 2.4 CMMI2级——需求管理(Requirements Management)
人是会死的,需求是会变的.相信大家都经历了很多需求变更的痛苦,项目被拖延,成本高涨,十有七八是需求管理没有做好导致的.有哪一些需求管理方面的常见问题呢,这里列举一下: 1.因为项目进度赶等原因,在很多 ...