数据库-rownum的说明及使用技巧
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的说明及使用技巧相关推荐
- 数据库设计中的14个技巧
数据库设计中的14个技巧 选择自 sirfei 的 Blog 1. 原始单据与实体之间的关系 可以是一对一.一对多.多对多的关系.在一般情况下,它们是一对一的关系:即一张原始单据对 应且只对应 ...
- 总结数据库设计中的14个技巧
总结数据库设计中的14个技巧 时间:2010-04-08 21:20来源:草根站长 作者:编辑整理 责任编辑: 雨儿 我要投稿 1. 原始单据与实体之间的关系 可以是一对一.一对多.多对多的关系.在一 ...
- mysql入门优化_MySQL数据库:MySQL十大优化技巧详解
本文主要向大家介绍了MySQL数据库的MySQL十大优化技巧详解,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. WEB开发者不光要解决程序的效率问题,对数据库的快速访问和相应也是 ...
- 提高MySQL数据库查询效率的几个技巧(转载)
[size=5][color=Red]提高MySQL数据库查询效率的几个技巧(转)[/color][/size] MySQL由于它本身的小巧和操作的高效, 在数据库应用中越来越多的被采用. ...
- mysql视图和中间表_数据库设计中的14个技巧
时 间:2006-09-15 00:00:00 作 者: 摘 要:数据库设计中的14个技巧 正 文: 1. 原始单据与实体之间的关系 可以是一对一.一对多.多对多的关系.在一般情况下,它们是一对一的关 ...
- 数据库设计方法、规范与技巧(推荐)
数据库设计方法.规范与技巧(推荐) 一.数据库设计过程 数据库技术是信息资源管理最有效的手段.数据库设计是指对于一个给定的应用环境,构造最优的数据库模式,建立数据库及其应用系统,有效存储数据,满足用户 ...
- MongoDB数据库索引基础知识与实战技巧
本文内容源自Kyle Banker 的MongoDB In Action一书.主要描述了MongoDB索引相关的一些基础知识和使用技巧. 索引类型 虽然MongoDB的索引在存储结构上都是一样的,但是 ...
- [转载]Java数据库设计中的14个技巧
下述十四个技巧,是许多人在大量的数据库分析与设计实践中,逐步总结出来的.对于这些经验的运用,读者不能生帮硬套,死记硬背,而要消化理解,实事求是,灵活掌握.并逐步做到:在应用中发展,在发展中应用. 1. ...
- mysql数据库设计中的14个技巧
作者: sirfei 链接:https://blog.csdn.net/sirfei 1. 原始单据与实体之间的关系 可以是一对一.一对多.多对多的关系.在一般情况下,它们是一对一的关系:即一张原始单 ...
最新文章
- java swing setborder_Swing编程边框(Border)的用法总结
- 基于bmob的校园资料分享互助平台
- 关于在Webservice里使用LinqToSQL遇到一对多关系的父子表中子表需要ToList输出泛型而产生循环引用错误的解决办法!(转)...
- L3-015 球队“食物链”(dfs)
- Spring-AOP @AspectJ切点函数之execution()
- leetcode130. 被围绕的区域
- 学pyqt5之前需要学python吗_快速学习pyqt5(1)--入门
- js获取jsp上下文地址
- 如何将项目发布到阿里云_尚硅谷基于阿里云搭建数据仓库(实时)项目视频发布...
- mockito无效_Mockito模拟无效方法
- C语言中的位操作(3)--两整数中的最大值与最小值
- java 启动参数 配置_Java运行参数设置
- 手机中如何使用阿里云的企业邮箱
- 岩板铺地好吗_岩板铺客厅地面好吗 比800*800的瓷砖更美观又大气?
- ibm是被联想收购了吗_联想收购IBM之后为什么出现品牌危机
- unity使用tiled文件,将数据用unity打开,可以无限tiled地图
- 5个值得关注的L1公链
- 深度学习矩阵乘法的终极奥义einsum,结合多个计算框架上的使用
- Replika:AI智能聊天机器人
- [ACNOI2022]猜数
热门文章
- 2022起重机械指挥上岗证题目模拟考试平台操作
- vitepress+gitee pages搭建自己的博客网站
- linux安装powerline字体,CentOS 7.3安装配置Powerline
- [html] 浏览器的默认字体大小是多少?怎么设计它的基准?
- wd移动硬盘不能识别_wd的移动硬盘为什么一直是无法识别的usb设备
- 北航计算机组成原理课程设计-2020秋 PreProject-Logisim-2^n mod 5问题
- python大数据和java大数据,经典好文
- C言语文件的翻开与封闭
- 发一个原创手绘唯美Flash《很爱很爱你》
- IOS开发者账号申请记录