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一切搞定。当然,语句写多了,稍微思考一点点,也是可行的。
今天总算是对这个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一切搞定。当然,语句写多了,稍微思考一点点,也是可行的。
相关文章推荐
- 学习的过程之一==关于log4j日志管理看到的自己之一=中兴面谈思考
- [跟着hsp步步学习系统]oracle培训学习集锦全360度扫描(10)一个分页存储过程
- 一个简单的oracle分页存储过程的实现和调用
- Oracle rownum用法与原理
- 一个程序员关于学习的思考顺带思考人生
- php入门学习知识点二 PHP简单的分页过程与原理
- 一个分页存储过程的学习
- 9、Oracle: ROWNUM用法和分页查询总结
- 东软学习,基于oracle的一个分页实例
- 一个关于Oracle分页的实现方案
- 关于MSSQL存储过程中使用游标的一个小例子(学习)
- Oracle ROWNUM用法和分页查询总结
- 一个简单的oracle分页存储过程的实现和调用
- 一个关于 ie 浏览器的 bug 解决过程和思考
- 关于一个程序员的学习的思考
- MSDN上关于sqlserver 万能分页原理实现的一个致命错误
- Oracle ROWNUM用法和分页查询总结
- Oracle ROWNUM用法和分页查询总结
- Oracle的rownum原理和使用(分页相关)
- 一个简单的oracle分页存储过程的实现和调用