分页之一_SQLServer
来源:互联网 发布:mac从网页上下载软件 编辑:程序博客网 时间:2024/05/16 02:53
参考: SQL分页语句
一, 准备
-- 创建数据库create database pagination;go
-- 使用该数据库
-- 使用该数据库use pagination;go
-- 建表
-- 删除 drop table student;
create table student(id int primary key identity,sname varchar(20));
-- 添加数据
-- 清空 truncate table student;
insert into student(sname) values('zhang7');insert into student(sname) values('zhang2');insert into student(sname) values('zhang5');insert into student(sname) values('zhang1');insert into student(sname) values('zhang3');insert into student(sname) values('zhang6');insert into student(sname) values('zhang9');insert into student(sname) values('zhang4');insert into student(sname) values('zhang8');
-- 查询
select * from student order by sname;
二, 分页的三种方法
1, 第一种方法
(1) 格式
SELECT TOP 页大小 table1.*FROM table1WHERE id NOT IN ( SELECT TOP 页大小*(页数-1) id FROM table1 ORDER BY id )ORDER BY id
(2) 注意:
select 1*2 可执行select top 3*2 id from student 不可执行
(3) 分页
①第一页
-- 页长: 3. 页数: 1. 按sname排序select top 3 student.*from studentwhere id not in ( select top 0 id from student order by sname )order by sname
结果:
②第二页
-- 页长: 3. 页数: 2. 按sname排序select top 3 student.*from studentwhere id not in ( select top 3 id from student order by sname )order by sname
结果:
③第三页
-- 页长: 3. 页数: 3. 按sname排序select top 3 student.*from studentwhere id not in ( select top 6 id from student order by sname )order by sname
结果:
2, 第二种方法
(1) 格式
SELECT TOP 页大小 *FROM table1WHERE id > ( SELECT ISNULL(MAX(id),0) FROM ( SELECT TOP 页大小*(页数-1) id FROM table1 ORDER BY id ) A )ORDER BY id
(2) 注意:
最里面的select语句, 如果不使用别名 "A" 就会报错(3) 分页
①第一页
-- 页长: 3. 页数: 1. 按sname排序select top 3 student.*from student where sname > ( select isnull( max(sname), 0 ) from ( select top 0 sname from student order by sname ) A )order by sname
结果:
②第二页
-- 页长: 3. 页数: 2. 按sname排序select top 3 student.*from studentwhere sname > ( select isnull( max(sname), 0 ) from ( select top 3 sname from student order by sname ) A )order by sname
③第三页
-- 页长: 3. 页数: 3. 按sname排序select top 3 student.*from studentwhere sname > ( select isnull( max(sname), 0 ) from ( select top 6 sname from student order by sname ) A )order by sname
3, 第三种方法
(1) 格式
SELECT TOP 页大小 * FROM ( SELECT ROW_NUMBER() OVER (ORDER BY id) AS RowNumber,* FROM table1 ) AWHERE RowNumber > 页大小*(页数-1)
(2) 分页
①第一页
-- 页长: 3. 页数: 1.select top 3 A.*from ( select row_number() over(order by id) as RowNumber, student.* from student ) Awhere A.RowNumber > 0;
②第二页
-- 页长: 3. 页数: 2.select top 3 A.*from ( select row_number() over(order by id) as RowNumber, student.* from student ) Awhere A.RowNumber > 3;
③第三页
-- 页长: 3. 页数: 3.select top 3 A.*from ( select row_number() over(order by id) as RowNumber, student.* from student ) Awhere A.RowNumber > 6;
三, 结论
分页方案二:(利用ID大于多少和SELECT TOP分页)效率最高,需要拼接SQL语句分页方案一:(利用Not In和SELECT TOP分页) 效率次之,需要拼接SQL语句
分页方案三:(利用SQL的游标存储过程分页) 效率最差,但是最为通用
- 分页之一_SQLServer
- 海量数据库的查询优化及分页算法方案_SQLServer
- Execute方法_SQLServer
- 分页查询例子之一
- 数据库分页读取之一
- Repeater/DataList分页方法之一
- eXtremeTable之一(分页实现)
- 黑马程序员_SQLServer的连接问题
- 1_SQLserver,oracle,mySQL---连接值
- Linux内存管理之一 分段与分页
- Ibatis实现动态分页分析之一
- Linux内存管理之一 分段与分页
- Linux内存管理之一 分段与分页
- SQL修改表结构_sqlserver——菜鸟笔记
- struts 下面的页面分页显示的实现(之一)
- 仿Baidu,Google查询分页技术实现分析之一
- 原创: 仿Baidu,Google查询分页技术实现分析之一
- 分页的sql语句之一写法与代码写法
- Android组件的使用:TabHost
- 南阳理工学院动态规划专题 回文字符串
- MyEclipse项目和eclipse项目互相引用的问题
- 无法找到VBScript脚本引擎或Error 2738,could not access vbscript runtime
- JAVA之包装Boolean详解
- 分页之一_SQLServer
- qczahvWTKR
- android dialog使用小结
- HDU1054 && POJ1463:Strategic game(树形DP)
- hsgtasgLUX
- utjhhwQnjw
- WebService 介绍
- 六类qsort排序方法
- nyoj 71 独木舟上的旅行