https://www.cnblogs.com/wyb628/p/7675691.html

一、rownum的说明

  rownum是oracle特有的一个关键字。

  (1)对于基表,在insert记录时,oracle就按照insert的顺序,将rownum分配给每一行记录,因此在select一个基表的时候,rownum的排序是根据insert记录的顺序显示的,例如:

select rownum as rn, t.* from emp t;

  (2)对于子查询,则rownum的顺序是根据子查询的查询顺序进行动态分配的,例如:

select rownum as t2_rn, t2.* from (select rownum as t1_rn , t1.* from emp t1 order by t1.sal) t2;

由上图可以看到T1_RN和T2_RN的区别。

t1中的rownum是根据emp这个基表的默认顺序分配的,而内层子循环是根据SAL字段进行排序,所以t2的rownum是根据内层子查询的记录顺序分配的。

----------------------------- 分 割 线 -------------------------------------

二、rownum的一些使用技巧

(1)使用rownum限制查询返回的记录数

1、例如,我们现在只想看到emp表中的第一条记录:

select * from emp where rownum=1;

将rownum限制为1,这样就只能查询出一条记录。

2、现在,我们现在想查看emp中的前2条记录:

select * from emp where rownum<=2;

将rownum的限制为2条,这样就可以查询出前2条记录。

3、假如我们现在只想查看emp中的第二条记录,又该如何写语句呢?

如果我们先这样写:

select * from emp where rownum=2;

where条件为:rownum=2,来看看查询结果:

发现没有查出任何数据,为什么呢?这里就要对oracle的rownum做进一步的理解。

因为rownum并不是当作实体数据存放在每一张表中,而是在每一次select查询的时候,根据基表的默认insert顺序由oracle动态分配的,有1才有2,如果rownum没有1,那么2也就没有了意义,所以这个查询就不会有任何结果出来。这个时候我们就需要利用子查询和别名列来实现这个需求:

select *
from ( select rownum as rn, t.* from emp t where rownum<=2 )
where rn=2 ;

首先通过子查询,取出emp表的前2条记录,并将子查询中的rownum定义为别名rn,然后在外层查询中,使用where条件使rn=2即可,查询出emp表的第二条记录:

http://www.cnblogs.com/szlbm/p/5806070.html

从上可以看出,任何时候想把 rownum = 1 这条记录抛弃是不对的,它在结果集中是不可或缺的,少了rownum=1 就像空中楼阁一般不能存在,所以你的 rownum 条件要包含到 1

但如果就是想要用 rownum > 10 这种条件的话话就要用嵌套语句,把 rownum 先生成,然后对他进行查询。
select * 
from (selet rownum as rn,t1.* from a where ...)
where rn >10

一般代码中对结果集进行分页就是这么干的。

另外:rowid 与 rownum 虽都被称为伪列,但它们的存在方式是不一样的,rowid 可以说是物理存在的,表示记录在表空间中的唯一位置ID,在DB中唯一。只要记录没被搬动过,rowid是不变的。rowid 相对于表来说又像表中的一般列,所以以 rowid 为条件就不会有 rownum那些情况发生。
另外还要注意:rownum不能以任何基表的名称作为前缀。

分类: 数据库

数据库-rownum的说明及使用技巧相关推荐

  1. 数据库设计中的14个技巧

    数据库设计中的14个技巧     选择自 sirfei 的 Blog 1. 原始单据与实体之间的关系 可以是一对一.一对多.多对多的关系.在一般情况下,它们是一对一的关系:即一张原始单据对 应且只对应 ...

  2. 总结数据库设计中的14个技巧

    总结数据库设计中的14个技巧 时间:2010-04-08 21:20来源:草根站长 作者:编辑整理 责任编辑: 雨儿 我要投稿 1. 原始单据与实体之间的关系 可以是一对一.一对多.多对多的关系.在一 ...

  3. mysql入门优化_MySQL数据库:MySQL十大优化技巧详解

    本文主要向大家介绍了MySQL数据库的MySQL十大优化技巧详解,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. WEB开发者不光要解决程序的效率问题,对数据库的快速访问和相应也是 ...

  4. 提高MySQL数据库查询效率的几个技巧(转载)

    [size=5][color=Red]提高MySQL数据库查询效率的几个技巧(转)[/color][/size]       MySQL由于它本身的小巧和操作的高效, 在数据库应用中越来越多的被采用. ...

  5. mysql视图和中间表_数据库设计中的14个技巧

    时 间:2006-09-15 00:00:00 作 者: 摘 要:数据库设计中的14个技巧 正 文: 1. 原始单据与实体之间的关系 可以是一对一.一对多.多对多的关系.在一般情况下,它们是一对一的关 ...

  6. 数据库设计方法、规范与技巧(推荐)

    数据库设计方法.规范与技巧(推荐) 一.数据库设计过程 数据库技术是信息资源管理最有效的手段.数据库设计是指对于一个给定的应用环境,构造最优的数据库模式,建立数据库及其应用系统,有效存储数据,满足用户 ...

  7. MongoDB数据库索引基础知识与实战技巧

    本文内容源自Kyle Banker 的MongoDB In Action一书.主要描述了MongoDB索引相关的一些基础知识和使用技巧. 索引类型 虽然MongoDB的索引在存储结构上都是一样的,但是 ...

  8. [转载]Java数据库设计中的14个技巧

    下述十四个技巧,是许多人在大量的数据库分析与设计实践中,逐步总结出来的.对于这些经验的运用,读者不能生帮硬套,死记硬背,而要消化理解,实事求是,灵活掌握.并逐步做到:在应用中发展,在发展中应用. 1. ...

  9. mysql数据库设计中的14个技巧

    作者: sirfei 链接:https://blog.csdn.net/sirfei 1. 原始单据与实体之间的关系 可以是一对一.一对多.多对多的关系.在一般情况下,它们是一对一的关系:即一张原始单 ...

最新文章

  1. Java同一个类的不同实例_如何创建2个类实例注入不同类的依赖项实现(通过guice)?...
  2. CASE WHEN 高阶用法?
  3. python sftp模块_python实现ssh及sftp功能(实例代码)
  4. 华为交换机S5700开启telnet
  5. mysql aes_MYSQL AES加密与解密函数使用
  6. 现代分层、聚集聚类算法_分层聚类:聚集性和分裂性-解释
  7. “ == “运算符与equals()方法的区别
  8. 蓝桥杯笔记:DFS(深度优先搜索)解决问题
  9. idea运行android usb调试,IntelliJ IDEA
  10. CORS跨域资源共享
  11. 配置项目构建完成后文件移动---- Jenkins自动化部署学习笔记(三)
  12. html新浪短域名api,新浪短链接API接口示例
  13. PLSQL Developer 13.0.0.1883 注册码
  14. OSError: [WinError 1455] 页面文件太小,无法完成操作。 Error loading “D:\Anaconda\envs\pytorch-1.4\lib\site-package
  15. 最大值最小值计算机一级,Excel2019中突出数据最大值和最小值的方法详解
  16. 源自神话的写作要义之英雄
  17. 未成年帐号登录华为游戏,启动后不断弹出防沉迷提示
  18. 微信小程序---页面事件
  19. js密码输入与确认密码验证功能
  20. 32bit 和 64bit系统的区别

热门文章

  1. admob facebook广告账号被封禁 申诉不通过【吐槽,我也没解决】
  2. 【PHP】冒泡排序以及优化
  3. Java程序设计课程练习题(题目+答案)
  4. ESIM模型详细解读
  5. Python创建进程类Process
  6. 我的第一块百达翡丽5205r加灯笼扣
  7. 清秋月 十年清秋,问心明月
  8. android442电视怎么投屏,夏普电视怎么投屏 夏普电视投屏设置方法【详解】
  9. JAVA FEL表达式的使用
  10. SQL语句大全,留着有用哦!