博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
oracle取前几行|中间几行|后几行
阅读量:6611 次
发布时间:2019-06-24

本文共 1041 字,大约阅读时间需要 3 分钟。

hot3.png

oracle中取指定行是利用一个参数rownum,例如,取前10行数据的代码就是:

select * from tablea where rownum < 10

那么取中间几行是不是就把rownum < 10改为rownum > 10 and rownum < 20呢?

尝试运行,会发现有异常!!!!然后,我们就需要学习rownum 的真正含义,以及如何使用了。

先好好理解 rownum 的意义吧。因为ROWNUM是对结果集加的一个伪列,即先查到结果集之后再加上去的一个列 (强调:先要有结果集)。简单的说 rownum 是对符合条件结果的序列号。它总是从1开始排起的。所以你选出的结果不可能没有1,而有其他大于1的值。所以没办法期望得到下面的结果集:

11 aaaaaaaa

12 bbbbbbb
13 ccccccc
.................

rownum >10 没有记录,因为第一条不满足去掉的话,第二条的rownum又成了1,所以永远没有满足条件的记录。或者可以这样理解:rownum是一个序列,是oracle数据库从数据文件或缓冲区中读取数据的顺序。它取得第一条记录则rownum值为1,第二条为2,依次类 推。如果你用>,>=,=,between...and这些条件,因为从缓冲区或数据文件中得到的第一条记录的rownum为1,则被删除, 接着取下条,可是它的rownum还是1,又被删除,依次类推,便没有了数据。

任何时候想把 rownum = 1 这条记录抛弃是不对的,它在结果集中是不可或缺的,少了rownum=1 就像空中楼阁一般不能存在,所以你的 rownum 条件要包含到 1.

如果就是想要用 rownum > 10 这种条件的话,就要用嵌套语句,把 rownum 先生成,然后对他进行查询。

select * from (select rownum as rn,t1.* from tablea t1 where ...) tab where tab.rn >10

类似的如果想要取中间几行数据的话,sql语句就应该这么写:select * from (selet rownum as rn,t1.* from tablea t1 where ...) tab where tab.rn >10 and tab.rn < 20

 参考文章:

转载于:https://my.oschina.net/u/3636678/blog/2877994

你可能感兴趣的文章
开发人员需知的Web缓存知识(转)
查看>>
线程池适合场合
查看>>
Linux如何修改SSH端口号
查看>>
《人月神话》第二章读后感
查看>>
【BZOJ1640&&BZOJ1692】队列变换
查看>>
天空的另一半
查看>>
JavaScript--模块化编程(笔记)
查看>>
通过浏览器查看nginx服务器状态配置方法
查看>>
shareSDK实现QQ第三方登录
查看>>
移动与pc端的touch,mouse,click事件触发过程
查看>>
*Practice*MS Money
查看>>
gamebryo笔记
查看>>
Sound.loadCompressedDataFromByteArray
查看>>
centos7 hbase 搭建笔记
查看>>
P1986 元旦晚会
查看>>
RabbitMQ BasicGet与BasicConsume的区别
查看>>
Android中Context解析
查看>>
【Android】Android中Serializable接口的定义和使用
查看>>
【Android】Android单例模式及使用单例模式实现自己的HttpClient工具类
查看>>
python之面向对象编程一
查看>>