转载自:原文:https://blog.csdn.net/songsenkeji/article/details/4432942

ROWNUM的概念
ROWNUM是一个虚假的列。它将被分配为 1,2,3,4,...N,N 是行的数量。一个ROWNUM值不是被永久的分配给一行 (这是最容易被误解的)。表中的某一行并没有标号;你不可以查询ROWNUM值为5的行——根本没有这个概念。另一个容易搞糊涂的问题是ROWNUM值是何时被分配的。ROWNUM值的分配是在查询的谓词解析之后,任何排序和聚合之前进行的。ROWNUM值只有当被分配之后才会增长。这就是为什么下面的查询永远都不会返回结果:
select * from countries where rownum>1;
ROWNUM > 1对于第一行来说并不是真值,ROWNUM没有增长到 2。所以,没有比1大的ROWNUM.永远都不要使用’ROWNUM>?‘和’ROWNUM=2…N’这样的条件。

用rownum显示排序结果的前N条记录
FROM/WHERE子句先被执行.
根据FROM/WHERE子句输出的行, ROWNUM被分配给他们并自增长.
SELECT 被应用.
GROUP BY 被应用.
HAVING is 被应用.
ORDER BY 被应用.
这就是为什么下面的SQL几乎总是错误的:
select rownum,job_title,min_salary
from jobs where rownum<3 order by min_salary;
正确的写法:
        select rownum,tmp.* from (
        select job_title,min_salary
        from jobs order by min_salary) tmp
        where rownum<=3;

用ROWNUM实现分页
select * from
        (select /*+ FIRST_ROWS(n) */ a.*,ROWNUM rnum
        from (your_query_goes_here, with order by) a
        where ROWNUM <=
        :MAX_ROW_TO_FETCH )
where rnum >= :MIN_ROW_TO_FETCH;
FIRST_ROWS(N)使优化器考虑最短时间获得前N条记录.
:MAX_ROW_TO_FETCH 某一页中结果集的最后一行。如果你每页显示10行,要显示第6页,那么此值取60。
:MIN_ROW_TO_FETCH 某一页中结果集的第一行。如果你每页显示10行,要显示第6页,那么此值取50。

ROWNUM对性能的影响
ROWNUM可以避免oracle在磁盘上进行排序。rownum无法避免全表扫描的发生,但是它可以避免对整个表数据的排序操作,在指定了rownum后,排序操作在内存中可以轻松完成。


我的补充:

使用rownum分页示例:

 --方式一:比第二种效率高
select * from
(
select A.*,rownum RN
from (select * from t1)A
where RN<=40
)where RN>21
--方式二:
select * from
(
select A.*,rownum RN
from (select * from t1)A
)where RN between 21 and 40

转:关于ROWNUM的使用的更多相关文章

  1. ORACLE 中ROWNUM用法总结(转)

    ORACLE 中ROWNUM用法总结! 对于 Oracle 的 rownum 问题,很多资料都说不支持>,>=,=,between...and,只能用以上符号(<.<=.!=) ...

  2. SQL中TOP,LIMIT,ROWNUM的用法

    SQL SERVER/MS Access的Select Top的用法: Select TOP number|percent table_columname FROM tablename MySQL/O ...

  3. oracle中row_number和rownum的区别和联系(翻译)

    http://www.tuicool.com/articles/bI3IBv 附问题:有以下一个SQL语句: SELECT * FROM ( SELECT t.*, row_number() OVER ...

  4. SQL基础--ROWNUM伪列

    ROWNUM伪列 的概念: rownum表示的是一个数据行编号的伪列,它的内容是在用户查询数据时,为用户动态分配的一个数组(行号). 注意它是随机生成的,并不是和某一行数据绑定在一起的. 观察rown ...

  5. 【Oracle】oracle中rownum的说明及使用技巧

    oracle中常用到ROWNUM,所以做一些本人对rownum的一些认识和使用技巧的记录,以便备查. 一.rownum的说明 rownum是oracle特有的一个关键字. (1)对于基表,在inser ...

  6. rownum和rowid伪列

    select row employee_id,last name,salary from employees; select row employee_id,last name,salary from ...

  7. oracle之rownum(伪列)

    整理和学习了一下网上高手关于rownum的帖子: 参考资料:  http://tech.ddvip.com/2008-10/122490439383296.html 和 http://tenn.jav ...

  8. sqlite实现oracle的rownum功能

    SELECT (SELECT COUNT(*) FROM [table] AS t2 WHERE t2.name <= t1.name) AS rowNum, id, name FROM [ta ...

  9. oracle中的rownum

    1.oracle存在rownum关键字,它是一个伪列(系统分配在结果集上的一个特殊列) SELECT * FROM  oracleTable WHERE ROWNUM=1 上面这条语句是能够查询出第一 ...

  10. Oracle中rownum和rowid的理解(转)

    本文转自地址http://www.linuxidc.com/Linux/2012-04/58300.htm rownum,rowid都叫伪列. 但是,rownum是逻辑上的编号,且其值总是从1开始,每 ...

随机推荐

  1. Ubuntu 下搭建 Android 开发环境(图文)

    转自 http://dawndiy.com/archives/153/ 1.安装JDK 1.下载JDK 目前最新的JDK版本是:Java SE Development Kit 7u5 下载地址: 查看 ...

  2. 云主机IO性能测试

    1:数据读取速度 ucloud云主机最低224.8MB/S,最高508.8MB/S,平均410.7MB/S     阿里云主机最低17.4MB/S, 最高189.6MB/S,平均170.6MB/S   ...

  3. 浅析Sql Server参数化查询

    说来惭愧,工作差不多4年了,直到前些日子被DBA找上门让我优化一个CPU占用很高的复杂SQL语句时,我才突然意识到了参数化查询的重要性. 相信有很多开发者和我一样对于参数化查询认识比较模糊,没有引起足 ...

  4. RabbitMQ ——“Hello World”

    介绍 RabbitMQ是一个消息实体服务(broker):它接收及转发消息.你可以把它想象成一个邮局:当你把你想要寄送的邮件放进邮箱里时,你能够确信邮局的派送员最终会把你的这封邮局送到这信的收件者手中 ...

  5. Intent的作用和表现形式简单介绍

    Intent的作用和表现形式简单介绍 1.描写叙述:Intent负责相应用中一次操作的动作,动作涉及的数据,附加数据进行描写叙述.系统或者应用依据此Intent的描写叙述,负责找到相应的组件,将Int ...

  6. sublime text 3 安装卸载插件和取消启动检查更新

    1.Perferences->Package Contro,输入install 调出 Install Package 选项并回车 2.安装相应的插件 2.点击首选项–设置(用户) 3.卸载插件 ...

  7. 【iCore4 双核心板_ARM】例程六:IWDG看门狗实验——复位ARM

    实验原理: STM32内部包含独立看门狗,通过看门狗可以监控程序远行,程序运行错误时, 未在规定时间内喂狗,自动复位ARM.本实验通过按键按下,停止喂狗,制造程序运行 错误,从而产生复位. 核心代码: ...

  8. 【GMT43智能液晶模块】例程六:WWDG看门狗实验——复位ARM

    实验原理: STM32内部包含窗口看门狗,通过看门狗可以监控程序运行,程序运行 错误时,未在规定时间喂狗,自动复位ARM.本实验通过UI界面中按钮按下 停止喂狗,制造程序运行错误,从而产生复位. 示例 ...

  9. Java四类八种数据类型

    http://www.cnblogs.com/simplefrog/archive/2012/07/15/2592011.html 第一类:逻辑型boolean 第二类:文本型char 第三类:整数型 ...

  10. Java知多少(87)选择框和单选按钮

    选择框.单选框和单选按钮都是选择组件,选择组件有两种状态,一种是选中(on),另一种是未选中(off),它们提供一种简单的 “on/off”选择功能,让用户在一组选择项目中作选择. 选择框 选择框(J ...