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 源码,初看源码一头雾水毫无头绪,真正静下心来细看写的真是精妙,让你感叹代码之美. 其结构明晰,高内聚.低耦合,兼具优秀的性能与便利的扩展性,在浏览器的兼容性(功能缺陷.渐 ...
随机推荐
- zk常见面试题
一个客户端修改了某个节点的数据,其它客户端能够马上获取到这个最新数据吗 ZooKeeper不能确保任何客户端能够获取(即Read Request)到一样的数据,除非客户端自己要求:方法是客户端在获取数 ...
- CSS -- 文字竖直居中
元素的height 和 lineheight 设置为一样即可.
- PostgreSQL配置文件--日志和错误
6 错误操作和日志 ERROR REPORTING AND LOGGING 6.1 日志写到哪里 Where to Log 6.1.1 log_destination 字符串 默认: log_dest ...
- IOS开发博客学习
M了个J :http://www.cnblogs.com/mjios/tag/objective-c/ http://www.cnblogs.com/tianjian/p/3358602.html ...
- 各种语言性能(CPU密集型程序)比较
都进行Fib数列计算,计算到n=40的计算时间: 注意:开始,我以为上图中的第二列就是代表C++的性能.但是现在发现,完全不正确. 如果你使用同样的抽象和同样的逻辑去实现同样的代码,C和C++的性能几 ...
- 【算法导论C++代码】Strassen算法
简单方阵矩乘法 SQUARE-MATRIX-MULTIPLY(A,B) n = A.rows let C be a new n*n natrix to n to n cij = to n cij=ci ...
- Android 常见内存泄漏的解决方式
在Android程序开发中.当一个对象已经不须要再使用了,本该被回收时.而另外一个正在使用的对象持有它的引用从而导致它不能被回收.这就导致本该被回收的对象不能被回收而停留在堆内存中,内存泄漏就产生了. ...
- (剑指Offer)面试题37:两个链表的第一个公共结点
题目: 输入两个链表,找出它们的第一个公共结点. 链表结点的定义如下: struct ListNode{ int val; ListNode* next; ListNode(int x):val(x) ...
- 怎样在model里面使用number_to_currency
ActiveSupport::NumberHelper.number_to_currency(amount, precision: 0)
- Unity5.1 新的网络引擎UNET(九) UNET 官方推荐视频教程
孙广东 2015.7.14 在新的网络引擎出现之前,Unity提供的是 内置 Raknet网络引擎, 这一次Unity想更新UGUI一样,花了大的手笔更新了, UNET. 原来的旧的网络组件 被提示 ...