【数据库】分页SQL操作
一、分页原因
--数据量大,需要分批次读取显示,因此需要有上一页,下一页的操作。
二、分页步骤
1.原理:要实现分页,必须知道某一页的数据从哪里开始到哪里结束。
页面大小:每页显示的数据量
2.分页
(1)mysql实现分页的sql(从0开始计数):
MYSQL实现分页的sql:
limit 开始,多少条
第0页
select * from student limit 0,10 ;
第1页
select * from student limit 10,10 ;
第2页
select * from student limit 20,10 ;
第n页
select * from student limit n*10,10
...
select * from student limit 页数*页面大小,页面大小
(2)oracle实现分页的sql(从1开始计数):--首先和mysql不同,oracle没有limit语法,实现相对比较复杂。
下面将写出分页操作的推导过程(即为什么这样写)
a.
sqlserver/oracle:从1开始计数
第n页 开始 结束
1 1 10
2 11 20
3 21 30
n (n-1)*10+1 n*10
select *from student where sno >=(n-1)*10+1 and sno <=n*10 ;
--此种写法的前提:必须是Id连续 ,否则 无法满足每页显示10条数据
b.select rownum,t.*from student t where rownum >=(n-1)*10+1 and rownum <=n*10 order by sno;
--1.如果根据sno排序则rownum会混乱(解决方案:分开使用->先只排序,再只查询rownum)
--2.但是rownum不能查询>的数据
c.采用子查询的方法解决了此种问题,有关rownum使用方法参考我另一篇文章
select s.* from student s order by sno asc;
select rownum, t.* from
(select s.* from student s order by sno asc) t
where rownum >=(n-1)*10+1 and rownum <=n*10 ;
select *from
(
select rownum r, t.* from
(select s.* from student s order by sno asc) t
)
where r>=(n-1)*10+1 and <=n*10 ;
(3) sqlserver实现分页的sql(从1开始计数):
a.
row_number() over(字段) ;
select *from
(
select row_number() over (sno order by sno asc) as r,* from student
where r<=n*10
)
where r>=(n-1)*10+1 and ;
b.
sqlserver2003:top --此种分页SQL存在弊端(如果id值不连续,则不能保证每页数据量相等)
select top 页面大小 * from student where id not in
( select top (页数-1)*页面大小 id from student order by sno asc )
c.
sqlserver2005之后支持:
offset fetch next only
select * from student oreder by sno
offset (页数-1)*页面大小+1 rows fetch next 页面大小 rows only ;
SQLServer此种分页sql与oralce分页sql的区别:
1.rownum ,row_number() 名称上的差别
2.oracle需要排序(为了排序,单独写了一个子查询),但是在sqlserver 中可以省略该排序的子查询 因为sqlserver中可以通过over直接排序
- sqldatareader 分批,分页操作数据库
- 数据库分页sql和hibernatetemplate分页操作
- 数据库批量操作中SqlParameter参数传递的问题
- MyBatis单一和批量操作数据库SQL
- 数据库操作增删改查SQL
- 数据库操作语句大全(sql)
- MS SQL Server数据库查询优化及分页算法
- 数据库sql操作
- SqlParameter参数方式操作数据库(存储过程)
- C#数据库操作(阅读器、数据库绑定、修改、统计、分页)(转)
- 数据库的SQL语句创建和主外键删除操作
- SQL中数据查询分页操作集中地
- SQL 数据库分页语句
- Jpa操作数据库之动态SQL语句的使用
- sql中遇到非正常操作引起的数据库文件破坏的恢复
- T-SQL操作MSSQL2008 --SQL备份与还原数据库
- vc++学生选课系统开发 sql操作数据库 ado封装
- 数据库操作sql【转】
- 获取SQL-SERVER数据库insert into操作的主键返回值
- YII数据库操作中打印sql