微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

分页之一_SQLServer

参考: 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] 举报,一经查实,本站将立刻删除。

相关推荐