参考: 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 table1 WHERE 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 student where id not in ( select top 0 id from student order by sname ) order by sname
结果:
②第二页
-- 页长: 3. 页数: 2. 按sname排序 select top 3 student.* from student where id not in ( select top 3 id from student order by sname ) order by sname
结果:
③第三页
-- 页长: 3. 页数: 3. 按sname排序 select top 3 student.* from student where id not in ( select top 6 id from student order by sname ) order by sname
结果:
2,第二种方法
(1) 格式
SELECT TOP 页大小 * FROM table1 WHERE 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 student where 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 student where 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 ) A WHERE RowNumber > 页大小*(页数-1)
(2) 分页
①第一页
-- 页长: 3. 页数: 1. select top 3 A.* from ( select row_number() over(order by id) as RowNumber,student.* from student ) A where A.RowNumber > 0;
②第二页
-- 页长: 3. 页数: 2. select top 3 A.* from ( select row_number() over(order by id) as RowNumber,student.* from student ) A where A.RowNumber > 3;
③第三页
-- 页长: 3. 页数: 3. select top 3 A.* from ( select row_number() over(order by id) as RowNumber,student.* from student ) A where A.RowNumber > 6;
三,结论
分页方案二:(利用ID大于多少和SELECT TOP分页)效率最高,需要拼接sql语句 分页方案一:(利用Not In和SELECT TOP分页) 效率次之,需要拼接sql语句 分页方案三:(利用sql的游标存储过程分页) 效率最差,但是最为通用版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。