说道oracle分页,不得不提一个字段
rownum:
1 oracle下select语句每个结构集都有一个伪字段存在,叫做rownum,用于标识每条记录的行号
2 从1开始,单次递增1,
3 只有<,<=,没有 =,>,>=(据说是为了效率考虑做的限制)
4 在查询取数据时产生序号,按照默认的顺序生成
5 基于 rownum不能实现 >, >=, =的操作,我们可以利用
5.1 用子查询将需要查询的字段放在临时表,同时将rownum这个临时字段用别名eg:r方式存储在临时表
5.2 去临时表中查询,此时临时表的 rownum已经不再是临时字段,因此利用此字段实现分页查询 eg: 2=< r <=9
看如下的处理结果,已经将rownum按照sal降序后规则显示
select rownum ,ename, sal from (select * from emp order by sal desc)
1 | Tom_ABCD | 6000 |
2 | KING | 5000 |
3 | FORD | 3000 |
4 | SCOTT | 3000 |
5 | JONES | 2975 |
6 | BLAKE | 2850 |
7 | CLARK | 2450 |
8 | ALLEN | 1600 |
9 | TURNER | 1500 |
10 | MILLER | 1300 |
11 | WARD | 1250 |
12 | MARTIN | 1250 |
13 | ADAMS | 1100 |
14 | JAMES | 950 |
15 | SMITH | 800 |
然后在去上面表中查询,将rownum作为业务字段(非临时字段)执行 >= <=操作
select r,ename, sal from (select rownum r,ename, sal from (select * from emp order by sal desc)) where r >= 5 and r<=9; (oracle实现分页 是通过嵌套行号最终作为非伪列字段方式来实现)
5 | JONES | 2975 |
6 | BLAKE | 2850 |
7 | CLARK | 2450 |
8 | ALLEN | 1600 |
9 | TURNER | 1500 |
当rownum 和 order by一起使用时,会首先处理rownum的条件,然后在进行排序,这个方式肯定不是我们需呀的。
相对于oracle, mysql分页就简单的多:
select * from emp order by sal desc limit 5,10;
查看下面操作,感受下rownum:
select rownum,empno,ename,sal from emp order by sal desc;
1 | 1001 | Tom_ABCD | 6000 |
10 | 7839 | KING | 5000 |
14 | 7902 | FORD | 3000 |
9 | 7788 | SCOTT | 3000 |
5 | 7566 | JONES | 2975 |
7 | 7698 | BLAKE | 2850 |
8 | 7782 | CLARK | 2450 |
3 | 7499 | ALLEN | 1600 |
11 | 7844 | TURNER | 1500 |
15 | 7934 | MILLER | 1300 |
4 | 7521 | WARD | 1250 |
6 | 7654 | MARTIN | 1250 |
12 | 7876 | ADAMS | 1100 |
13 | 7900 | JAMES | 950 |
2 | 7369 | SMITH | 800 |
上面的排序后,rownum是不会随着排序后的变化而变化的(这个数值生成后就固定,不会变更,可以类比理解为 name字段,zhangsan, lisi, wangwu....)
如果用下面这种查询方式,永远只能将 Tom_ABCD, ALLEN,SMITH 这三个人查出来
select rownum,empno,ename,sal from emp where rownum <=3 order by sal desc;
1 | 1001 | Tom_ABCD | 6000 |
3 | 7499 | ALLEN | 1600 |
2 | 7369 | SMITH | 800 |
相关推荐
### Oracle分页查询详解 #### 一、分页查询的重要性 在数据库操作中,分页查询是一项非常重要的技术。尤其当处理大量数据时,一次性获取所有数据不仅会消耗大量的网络带宽,还可能导致前端页面加载缓慢,用户体验...
### Oracle 分页查询并返回总记录数据存储过程 在数据库应用开发中,为了提高用户体验以及减少服务器负担,分页查询成为了一种常见的技术手段。Oracle 数据库提供了多种方法来实现分页查询,其中使用存储过程是一种...
根据所提供的信息,我们可以提炼出以下关于“ORACLE分页查询效率”的相关知识点: ### 一、Oracle中的分页查询 #### 1.1 分页查询的重要性 - **背景介绍**:在实际应用中,数据库查询结果往往非常庞大,一次性加载...
### 解决Oracle分页查询中排序与效率问题 在Oracle数据库中进行分页查询时,经常会出现性能瓶颈,尤其是在处理大数据量的情况下。本篇文章将详细探讨如何优化Oracle分页查询中的排序与效率问题。 #### 一、理解...
Oracle 分页查询优化与排序解决方案 本文主要解决 Oracle 分页查询中排序与效率问题,通过实践和分析,提供了两种解决方案,并对比了两种方法的优缺点。 知识点 1: Oracle 分页查询的基本概念 Oracle 分页查询是...
Oracle 分页查询详解 Oracle 分页查询是指从大型数据表中提取指定范围的记录,以便提高查询效率和减少数据传输量。常用的 Oracle 分页查询方法有三种:使用 ROWNUM、使用 ROW_NUMBER() 和使用子查询。 第一种方法...
msql和oracle分页查询语句笔记
首先,理解Oracle分页查询的基本结构。通常,Oracle的分页查询采用嵌套查询的方式实现。以下是一个典型的分页查询模板: ```sql SELECT * FROM ( SELECT A.*, ROWNUM RN FROM ( SELECT * FROM TABLE_NAME ) A ...
### Oracle分页查询详解 #### 一、引言 在数据库应用中,为了提高用户体验以及减少服务器负担,分页查询成为了一种常见的数据检索技术。Oracle作为一种广泛使用的数据库管理系统,支持多种方式进行分页查询。本文...
### Oracle分页查询技术 在Oracle数据库中,实现分页查询是常见的需求之一,尤其是在处理大量数据时。本文将详细介绍如何使用Oracle进行有效的分页查询,并深入探讨其背后的原理及优化策略。 #### 分页查询的基本...
Oracle分页查询语句的学习和示例演练
2. **构造SQL查询语句**:Oracle数据库支持使用`ROWNUM`进行分页查询。基本的SQL模板为: ```sql SELECT * FROM (SELECT t.*, ROWNUM rnum FROM (YOUR_SELECT_QUERY) t WHERE ROWNUM ) WHERE rnum >= :startRow `...
Oracle 的分页查询 在 Oracle 中,分页查询是非常常见的需求,但是在使用查询条件时又不能使用大于号(>)。本文将讲解 Oracle 中的分页查询,包括使用 ROWNUM 伪列和 ORDER BY 子句对查询结果进行排序和分页。 一...
### Oracle分页(LIMIT方式的运用) 在数据库查询操作中,分页是非常常见的需求之一,尤其是在数据量较大的情况下,为了提高用户体验以及减轻服务器压力,...希望本文能为你理解和掌握Oracle分页查询提供一定的帮助。