oracle取前几行|中间几行|后几行

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

select * from tablea where rownum < 10sql

那么取中间几行是否是就把rownum < 10改成rownum > 10 and rownum < 20呢?数据库

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

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

11 aaaaaaaa
12 bbbbbbb
13 ccccccc
.................htm

rownum >10 没有记录,由于第一条不知足去掉的话,第二条的rownum又成了1,因此永远没有知足条件的记录。或者能够这样理解:rownum是一个序列,是oracle数据库从数据文件或缓冲区中读取数据的顺序。它取得第一条记录则rownum值为1,第二条为2,依次类 推。若是你用>,>=,=,between...and这些条件,由于从缓冲区或数据文件中获得的第一条记录的rownum为1,则被删除, 接着取下条,但是它的rownum仍是1,又被删除,依次类推,便没有了数据。blog

任什么时候候想把 rownum = 1 这条记录抛弃是不对的,它在结果集中是不可或缺的,少了rownum=1 就像空中楼阁通常不能存在,因此你的 rownum 条件要包含到 1.get

若是就是想要用 rownum > 10 这种条件的话,就要用嵌套语句,把 rownum 先生成,而后对他进行查询。
select * from (select rownum as rn,t1.* from tablea t1 where ...) tab where tab.rn >10table

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

 参考文章:http://www.javashuo.com/article/p-eidejndy-db.html

相关文章
相关标签/搜索