分页之一_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的游标存储过程分页)    效率最差,但是最为通用





	
				
		
原创粉丝点击