加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读