rownum浅析
对于 Oracle 的 rownum 问题,非常多资料都说不支持>。>=。=。between...and,仅仅能用以上符号(<、<=、!=),并不是说用>, >=,=,between..and 时会提示SQL语法错误。而是常常是查不出一条记录来。还会出现似乎是莫名其妙的结果来,接下来看一下rownum的一些意义及常见使用方法。
ROWNUM 概念
如果某个表 emp 有 14 条记录 。
select count(*) from emp;
假设用 select rownum, empno from emp where rownum < 10, 仅仅要是用小于号,查出来的结果非常easy地与一般理解在概念上能达成一致,应该不会有不论什么疑问的。
可假设用 select rownum, empno from emp where rownum > 10 (假设写下这种查询语句。这时候在您的头脑中应该是想得到表中后面4 条记录),你就会发现,显示出来的结果要让您失望了。未查询到不论什么记录。
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
或许您还会怀疑是不谁删了一些记录,然后查看记录数。仍然是 14 条啊?那问题是出在哪呢?
先理解 ROWNUM,由于ROWNUM是对结果集加的一个伪列,即先查到结果集之后再加上去的一个列 (强调:先要有结果集)。
select t.*, rownum from emp t;
简单的说 rownum 是对符合条件结果的序列号。
它总是从1開始排起的。
所以你选出的结果不可能没有1,而有其它大于1的值。所以您没办法期望得到以下的结果集:
11 7876
12 7900
13 7902
14 7934
rownum >10 没有记录,由于第一条不满足去掉的话。第二条的ROWNUM又成了1。所以永远没有满足条件的记录。
或者能够这样理解:
ROWNUM是一个序列,是oracle数据库从数据文件或缓冲区中读取数据的顺序。
它取得第一条记录则rownum值为1,第二条为2,依次类推。假设你用>、>=、=、between...and这些条件。由于从缓冲区或数据文件里得到的第一条记录的rownum为1,则被删除,接着取下条。但是它的rownum还是1。又被删除,依次类推。便没有了数据。
ROWNUM 现象解释
有了以上从不同方面建立起来的对 rownum 的概念,那我们能够来认识使用 rownum 的几种现像
1、select rownum, empno from emp where rownum != 10
为何是返回前9条数据呢?
它与 select rownum,c1 from tablename where rownum < 10 返回的结果集是一样的呢?
由于是在查询到结果集后,显示完第 9 条记录后,之后的记录也都是 != 10,或者 >=10,所以仅仅显示前面9条记录。也能够这样理解,rownum 为9后的记录的 rownum为10,因条件为 !=10,所以去掉。其后记录补上,rownum又是10,也去掉,假设下去也就仅仅会显示前面9条记录了。
2、为什么 rownum >1 时查不到一条记录,而 rownum >0 或 rownum >=1 却总显示所以的记录
由于 rownum 是在查询到的结果集后加上去的,它总是从1開始。
3、为什么 between 1 and 10 或者 between 0 and 10 能查到结果。而用 between 2 and 10 却得不到结果
原因同上一样,由于 rownum 总是从 1 開始。
4、oracle分页
从上能够看出。不论什么时候想把 rownum = 1 这条记录抛弃是不正确的。它在结果集中是不可或缺的,少了rownum=1 就像空中楼阁一般不能存在。所以你的 rownum 条件要包括到 1
但假设就是想要用 rownum > 10 这样的条件的话话就要用嵌套语句,把 rownum 先生成,然后对他进行查询。
select *
from (selet rownum as rn。t1.* from a where ...)
where rn >10
PS:rownum不能以不论什么基表的名称作为前缀
rownum浅析的更多相关文章
- ORACLE中Scalar subquery Caching的hash table大小测试浅析
前阵子总结了这篇"ORACLE当中自定义函数性优化浅析"博客,里面介绍了标量子查询缓存(scalar subquery caching),如果使用标量子查询缓存,ORACLE会 ...
- oracle的number的浅析
author:skate time:2011-02-14 oracle的number的浅析 从例如以下几个方面来认识number 1.表示的数值范围 2.占用的存储空间 3.number的性能 ...
- SQL Server on Linux 理由浅析
SQL Server on Linux 理由浅析 今天的爆炸性新闻<SQL Server on Linux>基本上在各大科技媒体上刷屏了 大家看到这个新闻都觉得非常震精,而美股,今天微软开 ...
- 【深入浅出jQuery】源码浅析--整体架构
最近一直在研读 jQuery 源码,初看源码一头雾水毫无头绪,真正静下心来细看写的真是精妙,让你感叹代码之美. 其结构明晰,高内聚.低耦合,兼具优秀的性能与便利的扩展性,在浏览器的兼容性(功能缺陷.渐 ...
- 高性能IO模型浅析
高性能IO模型浅析 服务器端编程经常需要构造高性能的IO模型,常见的IO模型有四种: (1)同步阻塞IO(Blocking IO):即传统的IO模型. (2)同步非阻塞IO(Non-blocking ...
- netty5 HTTP协议栈浅析与实践
一.说在前面的话 前段时间,工作上需要做一个针对视频质量的统计分析系统,各端(PC端.移动端和 WEB端)将视频质量数据放在一个 HTTP 请求中上报到服务器,服务器对数据进行解析.分拣后从不同的 ...
- Jvm 内存浅析 及 GC个人学习总结
从诞生至今,20多年过去,Java至今仍是使用最为广泛的语言.这仰赖于Java提供的各种技术和特性,让开发人员能优雅的编写高效的程序.今天我们就来说说Java的一项基本但非常重要的技术内存管理 了解C ...
- 从源码浅析MVC的MvcRouteHandler、MvcHandler和MvcHttpHandler
熟悉WebForm开发的朋友一定都知道,Page类必须实现一个接口,就是IHttpHandler.HttpHandler是一个HTTP请求的真正处理中心,在HttpHandler容器中,ASP.NET ...
- 【深入浅出jQuery】源码浅析2--奇技淫巧
最近一直在研读 jQuery 源码,初看源码一头雾水毫无头绪,真正静下心来细看写的真是精妙,让你感叹代码之美. 其结构明晰,高内聚.低耦合,兼具优秀的性能与便利的扩展性,在浏览器的兼容性(功能缺陷.渐 ...
随机推荐
- node.js+mysql增删查改
数据库和表: -- -- 数据库: `test` -- -- -------------------------------------------------------- -- -- 表的结构 ` ...
- Android 将ARGB图片转换为灰度图
思路如下: 1.读取or照相,得到一张ARGB图片. 2.转化为bitmap类,并对其数据做如下操作: A通道保持不变,然后逐像素计算:X = 0.3×R+0.59×G+0.11×B,并使这个像素的值 ...
- Less的安装与配置
Less的安装与配置 Less与Sass 先说一段题外话,很多初学者在选择CSS 预处理语言不免会感到犹豫,作为CSS 的两大预处理语言Less与Sass,各自都有着很广泛的使用群体,我究竟该选哪个好 ...
- js中字符串转换为数字
js 字符串转化成数字的三种方法主要有 转换函数.强制类型转换.利用js变量弱类型转换. 1. 转换函数: js提供了parseInt()和parseFloat()两个转换函数.前者把值转换成整数,后 ...
- JMeter 四:建立高级web测试计划
发送带有Header的请求 参考:http://jmeter.apache.org/usermanual/build-adv-web-test-plan.html#header_manager Jme ...
- js 因加入form导致两个table之间出现空白问题
在<FORM>中加CSS <table> ....... </table> <form style="padding:0; margin:0;&qu ...
- 关于app更新安装闪退和EditText长按出现的水滴颜色设置问题
关于app应用内更新安装后闪退的问题,解决办法如下: private void updateApp(File body) { Intent intent = new Intent(Intent.ACT ...
- UVA 10168 Summation of Four Primes(数论)
Summation of Four Primes Input: standard input Output: standard output Time Limit: 4 seconds Euler p ...
- UML for mac
今年苹果公司推出的iPhone4和iPad继续大获成功,国内想在苹果的平台下开发软件赚钱的开发人员越来越多.那么,在苹果的平台下开发软件有哪些UML建模工具可用呢?虽然不如Windows平台下那么多的 ...
- 进程上下文切换 – 残酷的性能杀手(上)(转载cppthinker.com)
对于服务器的优化,很多人都有自己的经验和见解,但就我观察,有两点常常会被人忽视 – 上下文切换 和 Cache Line同步 问题,人们往往都会习惯性地把视线集中在尽力减少内存拷贝,减少IO次数这样的 ...