第一:比如写一个最简单的,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一切搞定。当然,语句写多了,稍微思考一点点,也是可行的。