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 源码,初看源码一头雾水毫无头绪,真正静下心来细看写的真是精妙,让你感叹代码之美. 其结构明晰,高内聚.低耦合,兼具优秀的性能与便利的扩展性,在浏览器的兼容性(功能缺陷.渐 ...
随机推荐
- GNU C内联汇编(AT&T语法)
转:http://www.linuxso.com/linuxbiancheng/40050.html 内联汇编提供了可以在C或C++代码中创建汇编语言代码,不必连接额外的库或程序.这种方法对最终程序在 ...
- PHP版本切换
前言 php是为了快速构建一个web页面而迅速被大家广为接受的开源语言,通过不断发展已经有了很多的php开源系统,满足了目前大部分用户的站点需求.1995年初php诞生到现在已经存在多个版本,并且每个 ...
- 流畅的python第七章函数装饰器和闭包学习记录
本章讨论的话题 python如何计算装饰器句法 python如何判断变量是不是局部的(通过函数内部是否给变量赋值过来判断是否是局部变量) 闭包存在的原因和工作原理(闭包是一种函数,它会保留定义函数时存 ...
- Android LayoutInflater布局填充器
Android LayoutInflater布局填充器 把一份xml布局文件转为View对象,这就是layoutinflater的作用. 对于一个没有被载入或者想要动态载入的界面,都需要使用Layou ...
- Git的状态转换
近期公司用Git来管理代码,用起来是要比svn爽一些.就是刚接触的时候比較痛苦,特别是那些状态(版本号的提交/合并/回退).差点把我搞晕了. 如今回过头来总结一下,就清楚多了. ...
- C#/Sqlite-单机Window 程序 sqlite 数据库实现
数据库分析和选择 Excel 文件 做数据源 限制性比较强,且不适合查询,分析 等操作 Access 数据库 Access 管理数据界面和功能不强 mysql 和sql server 功能满足,但需要 ...
- mysql 比较隐秘的问题
2017-11-13 13:47:27:DEBUG DubboServerHandler-192.168.30.114:20990-thread-5 com.yryz.qshop.modules.in ...
- 使用Kotlin创建Android项目
如果你已经使用过Android Studio和Gradle,那么这一章会比较简单.我不会给出很多细节和截图,因为用户界面和细节可能会一直变化. 我们的应用是由一个简单的天气app组成,正如所使用的Go ...
- 算法笔记_102:蓝桥杯练习 算法提高 快乐司机(Java)
目录 1问题描述 2 解决方案 1 问题描述 问题描述 "嘟嘟嘟嘟嘟嘟 喇叭响 我是汽车小司机 我是小司机 我为祖国运输忙 运输忙" 这是儿歌“快乐的小司机”.话说现在当司机光 ...
- Android五天乐(第二天)Activity跳转与传输数据,Fragment
1 Activity的生命周期 activity在生命周期内共同拥有执行.暂停,和停止三种状态.每次发生状态转换时,都有一个Activity方法将状态改变的消息通知给activity.activity ...