sql-分页
作者:互联网
分页
oracle中使用伪列实现分页
a. 伪列
select rownum ,rowid, e.ename from emp e;
-- 报错 伪列不属于某一张具体的表
select e.rownum,e.rowid, e.ename from emp e;
b. 使用伪列实现分页
显示工资最高的前三条
select rownum, e.ename,e.sal from emp e where rownum <=3 ORDER BY sal;
这个sql错误
rownum 按初始顺序生成,一旦生成不可改变。
-- 这条先生成伪列,后排序
可以使用子查询实现
-- 先排序 后生成伪列 使用子查询
select rownum, e.ename,e.sal from (select * from emp order by sal desc) e where rownum <=3;
显示工资最高的第7-9条数据
select rownum,e.ename,e.sal from(select * from emp order by sal desc) e where rownum >= 7 and rownum <= 9;
原因:rownum只能使用< 、<=; 不能使用>、 >=
解决-->子查询
select * from (select rownum r, e.ename,e.sal from (select * from emp order by sal desc) e where rownum <=9) b where r >= 7;
注意 :
where r >= 7;
这里判断的是虚表b 的列 rownum,不能写为 rownum >= 7,同时不能直接写为 b.rownum >= 7rownum <=9 不能写为 r <=9
:表的别名可以被自身表的列使用,但列的别名不能被自身表使用
分页SQL-oracle
假设每页显示10条数据,查询第n页的SQL语句是?
公式:
开始的索引 = (当前的页码 - 1) * 每页显示的条数 + 1
结束索引 = (当前的页码 * 每页显示的条数)
select * from (select rownum r, e.ename,e.sal from (select * from emp order by sal desc) e where rownum <= n*10 ) b where r >= (n-1)*10+1;
这里的10 就是 pageSize
页面大小;变量 n 就是 currentPage
当前页码
这个sql也可以改成 从数据库表中的第M条记录开始取N条记录
形式,方便可其他数据库 参数 保持统一。
当然 实际写页面过程中 分页 需要五个变量来实现,其他一些参数都可以通过这五个变量来计算出来
1.数据总数
查数据select count(*)
2.页面大小(每页显示的数据条数) 30
用户自定页
3.总页数
程序自动计算
总页数=(数据条数%页面大小 == 0) ? (数据条数/页面大小):(数据条数/页面大小+1)
4.当前页(页码)
用户自定页
5.当前页的对象集合(实体类集合):每页所显示的所有数据(10个人的信息)
查数据库,分页sql
List<Student>
mysql中使用limit实现分页
limit 是一个MySQL"方言" oracle不支持
语法:limit 开始的索引,每页查询的条数;
-- 每页显示3条记录
SELECT * FROM student LIMIT 0,3; -- 第1页
SELECT * FROM student LIMIT 3,3; -- 第2页
SELECT * FROM student LIMIT 6,3; -- 第3页
分页sql-mysql
Mysql数据库最简单就是利用LIMIT,从数据库表中M条记录开始检索N条记录的语句为:
SELECT [列名列表] FROM 表名称 LIMIT M,N
例如从表Sys_option(主键为sys_id)中从10条记录开始检索20条记录,语句如下:
select * from sys_option limit 10,20
分页sql-sqlserver
SQL Server
从数据库表中的第M条记录开始取N条记录,利用Top关键字(如果Select语句中既有top,又有orderby,则是从排序好的结果集中选择):
SELECT *
FROM ( SELECT Top N *
FROM (SELECT Top (M + N - 1) * FROM 表名称 Order by 主键 desc) t1 ) t2
Order by 主键 asc;
例如从表Sys_option(主键为sys_id)中从10条记录还是检索20条记录,语句如下:
SELECT *
FROM (SELECT TOP 20 *
FROM (SELECT TOP 29 * FROM Sys_option order by sys_id desc) t1) t2
Order by sys_id asc;
标签:分页,sal,--,select,sql,rownum,SELECT 来源: https://www.cnblogs.com/jiyuchen1/p/16398620.html