您的位置:首页 > 数据库 > Oracle

oracle rownum用法关于分页,只要看懂了原理,你就明白了,也算是自己学习过程的一个思考

2010-03-05 10:24 363 查看
今天闲来没有多少事情,又想对Linux系统进行了解一下,当然,主要是针对工程大部分需要部署到上面,就先从数据库着手了,当然两者没有多少关系,只是自己的一个顺序罢了。

今天总算是对这个ROWNUM比较的了解。当然这个应该是早就应该了解了的,到现在才清楚一点的认识,也算是有点惭愧吧,

平时在写分页的时候,几乎每一条都用到了ROWNUM,除非是查出数据处理的除外,但是对它都没有一个很好的认识。

首先:ROWNUM就是一个伪列,它是要先生成,在使用,所以如果是再写语句的时候,写错乱了就会出现问题。

第一:比如写一个最简单的,SELECT ROWNUM AS RN, TBL.* FROM TBL,看出点什么?就跟语句跟它加了一个编号而已,

这个编号是一伪编号,当然可能是我的理解还不够到位,不过多写语句之后,还是理解出了一点点。

第二:又来一条SELECT ROWNUM AS RN , TBL.* FROM TBL WHERE RN>0 AND RN<10

和SELECT ROWNUM AS RN , TBL.* FROM TBL WHERE ROWNUM>0 AND ROWNUM<10,显然了吧,RN是无效的字符。

这里就可以声明一点就是,一切数据都是从表当中来的,如果你想凭空产生一些,你就要先声明,插入你的结果集当中,

比如:SELECT 'CUSTOM' AS CUSTOM, TBL.* FROM TBL就会出现常量字段,并且所有值都是CUSTOM,只不过这个ROWNUM是oracle的一个数据量给用户使用而已,

在使用的时候,也得先得到数据,他会给你自动排列,(所以这个还是有一个很好的功能,这里虽然说得不伦不类,只是自己的原因,

因为你在写的时候,比如第二点的第二条语句,他就会出来数据,这是为什么?就是可以在后面使用)而不用你去写什么函数啊,

之类的来自己排列一样。所以对于大于(>),小于(<),包括加上等于之类的

都需要注意一下原理就可以了,就跟网上说的很多一样,为什么会写>1的时候,没有数据,

在itput上看到一个很久以前的说法,觉得很好==

OWNUM是一个序列,是oracle数据库从数据文件或缓冲区中读取数据的顺序。它取得第一条记录则rownum值为1,第二条为2,依次类推。如果你用>,>=,=,between...and这些条件,因为从缓冲区或数据文件中得到的第一条记录的rownum为1,则被删除,接着取下条,可是它的rownum还是1,又被删除,依次类推,便没有了数据。

,其实在理解了它是伪列,使用的时候,先查询,后来选择列就没问题了,比如:

select *

from (selet rownum as rn,t1.* from a where ...)

where rn >10一切搞定。当然,语句写多了,稍微思考一点点,也是可行的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: