本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《
阿里云开发者社区用户服务协议
》和
《
阿里云开发者社区知识产权保护指引
》。如果您发现本社区中有涉嫌抄袭的内容,填写
侵权投诉表单
进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
* 分页一般采用数据库的sql语句完成分页查询.
* MYSQL分页:使用limit关键字.
* Oracle分页:使用rownum SQLServer分页:使用top关键字.
* select * from customer limit a,b;
* 参数a:代表从那条记录开始,初始值是0.
* 参数b:查询长度.
* 分页关系:
page(当前页数) limit(每页显示条数) start(从哪开始的)
1 10 0
2 10 10
3 10 20
***** start = (page - 1) * limit;
*
向后台传递值:
当前页数.
*
后台向页面显示数据:currPage(
当前页数)
、List<Customer>
、totalPage(
总页数.
需要通过总记录数进行计算.)
、totalCount(
总记录数)
、limit(
每页显示的记录数).
*
将这些参数进行封装.
封装到一个JavaBean
中.
用request
域存取JavaBean.
====================================华丽丽的分割线================================================
Oracle中的分页:
Oracle中分页用rownum;
rownum的特点现象:
1 SQL> select rownum,ename from emp;
3 ROWNUM ENAME
4 ---------- ----------
5 1 SMITH
6 2 ALLEN
7 3 WARD
8 4 JONES
9 5 MARTIN
10 6 BLAKE
11 7 CLARK
12 8 SCOTT
13 9 KING
14 10 TURNER
15 11 ADAMS
16 12 JAMES
17 13 FORD
18 14 MILLER
如果在加上order by排序的条件限制
1 SQL> select rownum ,ename,sal from emp order by sal desc;
3 ROWNUM ENAME SAL
4 ---------- ---------- ----------
5 9 KING 5000
6 13 FORD 3000
7 8 SCOTT 3000
8 4 JONES 2975
9 6 BLAKE 2850
10 7 CLARK 2450
11 2 ALLEN 1600
12 10 TURNER 1500
13 14 MILLER 1300
14 3 WARD 1250
15 5 MARTIN 1250
16 11 ADAMS 1100
17 12 JAMES 950
18 1 SMITH 800
加上order by 之后rownum 依旧没有变化,说明rownum是基于原始表emp进行排序的 ,固定住了,所以如下使用rownum<=3 来取得Top3是错误的:
1 SQL> select rownum,empno,ename,sal
2 from emp
3 where rownum<=3
4 order by sal desc;
6 ROWNUM EMPNO ENAME SAL
7 ---------- ---------- ---------- ----------
8 7499 ALLEN 1600
9 7521 WARD 1250
10 7369 SMITH 800
为什么Oracle中的rownum行号不变?
在Oracle中分为标准表,临时表,索引表...
1 SQL> --标准表,临时表,索引表
2 SQL> --create global temporary table *****
3 SQL> --临时表:基于会话 基于事务
4 SQL> --特点:当会话或者事务结束的时候,表中的数据自动删除
创建临时表用
create global temporary table
临时表可以基于会话
,
也可以基于事务
.
特点
:
当会话或者事务结束的时候
,
表中的数据自动删除
.退出会话
,
或者退出事务表中的删除就删除了
.
比如:公司财务会做很多报表
.
中间的结果可以保存到临时表中
.
最后也
不需要手动删除
.
临时表有两种方式创建
,
一个是手动
,
一个是
Oracle
自动创建临时表
.
自动创建临时表最典型的是排序
,order by....
order by...
之后
Oracle
会自动创建一个临时表
,
保存的是排好序之后的数据
.
我们最终看到的排好序的是临时表中的数据
.
但是行号永远来按照原来的表来生成
,
只要原来的表来生成
,
只要原来的表内容没有变
,
行号就不变
....
这就解释了为什么行号不变
...
1 SQL> /*
2 SQL> 注意的问题
3 SQL> 1. rownum永远按照默认的顺序生成
4 SQL> 2. rownum只能使用< <=; 不能使用> >=
5 SQL> */
rownum
只能使用
< <=;
不能使用
> >=
如下使用
>=
就报错
.
这个和行号的生成原理有关系
,Oracle
和
Mysql
都是基于行的行式数据库
,nosql
数据库都是基于列的
.
Oracle
这样的行式数据库中
rownum
永远从
1
开始
,
取了第
1
行才能去第
2
行
...
取了第
2
行才能取第三行
....
rownum>=5
所以这个条件永远为假
,
前面的
4
个都没有取
.
rownum<=8
这个条件可以
.
如果在sql中使用'rownum >'
SQL> --分页
SQL> select rownum,empno,ename,sal
2 from emp
3 where rownum>=5 and rownum<=8;
SQL> select rownum,empno,ename,sal
2 from emp
3 where rownum>=5;
解决方法是:
--oracle分页
SQL> select *
2 from (select rownum r,e1.*
3 from (select * from emp order by sal) e1
4 where rownum <=8
6 where r >=5;
R EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- ---------- --------- ---------- -------------- ---------- ---------- ----------
5 7654 MARTIN SALESMAN 7698 28-9月 -81 1250 1400 30
6 7934 MILLER CLERK 7782 23-1月 -82 1300 10
7 7844 TURNER SALESMAN 7698 08-9月 -81 1500 0 30
8 7499 ALLEN SALESMAN 7698 20-2月 -81 1600 300 30
详细的分析过程因为博客园 编辑器不够强大,我用word解释了,这里附截图和部分SQL文:
这个是从第二个select开始的sql语句:
SQL> select rownum r,e1.*
2 from (select * from emp order by sal) e1
3 where rownum <=8
R EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- ---------- --------- ---------- -------------- ---------- ---------- ----------
1 7369 SMITH CLERK 7902 17-12月-80 800 20
2 7900 JAMES CLERK 7698 03-12月-81 950 30
3 7876 ADAMS CLERK 7788 23-5月 -87 1100 20
4 7521 WARD SALESMAN 7698 22-2月 -81 1250 500 30
5 7654 MARTIN SALESMAN 7698 28-9月 -81 1250 1400 30
6 7934 MILLER CLERK 7782 23-1月 -82 1300 10
7 7844 TURNER SALESMAN 7698 08-9月 -81 1500 0 30
8 7499 ALLEN SALESMAN 7698 20-2月 -81 1600 300 30
已选择 8 行。
=======================================逻辑分页=======================================================
•在sql查询时,先从数据库检索出所有数据的结果集
•在程序内,通过逻辑语句获得分页需要的的数据
•例如: 检索11-20条 userList.subList(10,20);
* 一次性将数据库中所有记录都查询出来,存放到List集合中,每次查询的时候,List集合subList.截取List集合的长度,完成分页.
* 优点:只访问一次数据库.
* 缺点:如果数据量非常大,容易导致内存溢出.
在java中传递封装分页相关信息的时候的JavaBean的设计
* 分页查询 数据类 存放分页相关所有数据
public class PageBean {
private int pageNum; // 当前页码
private int numPerPage; // 每页记录条数
private int totalCount; // 总记录条数
private int totalPageNum; // 总页数
private List<Customer> customers; // 当前页需要数据
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
Oracle总结【SQL细节、多表查询、分组查询、分页】下
在之前已经大概了解过Mysql数据库和学过相关的Oracle知识点,但是太久没用过Oracle了,就基本忘了…印象中就只有基本的SQL语句和相关一些概念….写下本博文的原因就是记载着Oracle一些以前没注意到的知识点…以后或许会有用…
实例与数据库概念
java3y
Oracle总结【SQL细节、多表查询、分组查询、分页】上
在之前已经大概了解过Mysql数据库和学过相关的Oracle知识点,但是太久没用过Oracle了,就基本忘了…印象中就只有基本的SQL语句和相关一些概念….写下本博文的原因就是记载着Oracle一些以前没注意到的知识点…以后或许会有用…
实例与数据库概念
java3y
Oracle总结【视图、索引、事务、用户权限、批量操作】三
在Oracle总结的第一篇中,我们已经总结了一些常用的SQL相关的知识点了…那么本篇主要总结关于Oralce视图、序列、事务的一些内容…
在数据库中,我们可以把各种的SQL语句分为四大类…
(1)DML(数据操纵语言):select,insert,update,delete
(2)DDL(数据定义语言):create table,alter table,drop table,truncate table
(3)DCL(数据控制语言):grant select any table to scott/revoke select any table from scott
(4)TCL(事务
java3y
Oracle总结【视图、索引、事务、用户权限、批量操作】二
在Oracle总结的第一篇中,我们已经总结了一些常用的SQL相关的知识点了…那么本篇主要总结关于Oralce视图、序列、事务的一些内容…
在数据库中,我们可以把各种的SQL语句分为四大类…
(1)DML(数据操纵语言):select,insert,update,delete
(2)DDL(数据定义语言):create table,alter table,drop table,truncate table
(3)DCL(数据控制语言):grant select any table to scott/revoke select any table from scott
(4)TCL(事务
java3y
Oracle总结【视图、索引、事务、用户权限、批量操作】 一
在Oracle总结的第一篇中,我们已经总结了一些常用的SQL相关的知识点了…那么本篇主要总结关于Oralce视图、序列、事务的一些内容…
在数据库中,我们可以把各种的SQL语句分为四大类…
(1)DML(数据操纵语言):select,insert,update,delete
(2)DDL(数据定义语言):create table,alter table,drop table,truncate table
(3)DCL(数据控制语言):grant select any table to scott/revoke select any table from scott
(4)TCL(事务
java3y
使用CloudLens采集RDS日志并进行审计分析
AnalyticDB MySQL游戏行业数据分析实践
函数计算X RDS PostgreSQL,基于LLM大语言模型构建AI知识库
AnalyticDB MySQL海量数据秒级分析体验
5分钟上手Flink MySQL连接器
PolarDB for MySQL 多主集群体验