分页之一_SQLServer
发布时间:2020-12-12 16:07:50 所属栏目:MsSql教程 来源:网络整理
导读:参考:?SQL分页语句 一,准备 -- 创建数据库 create database pagination;go -- 使用该数据库 -- 使用该数据库use pagination;go -- 建表 -- 删除 drop table student; create table student(id int primary key identity,sname varchar(20)); -- 添加数据 --
参考:?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的游标存储过程分页) ? ?效率最差,但是最为通用(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |