rownum是对查询的结果集加上的一个伪列,先查询出来有一个结果集,然后再在这个结果集上加一个伪列,也就是说先有查询结果集,再有rownum,它不属于数据库的列,而且它的值总是从1开始排起的,或者说它是对查询符合条件的结果集的序列号,所以它总是先有1,再有2,等等。
所以你不可能查询出rownum是从2开始的,这样:
| rownum | c1 |
| 2 | value1 |
| 3 | value2 |
查询不可能查出这样的结果集,不管怎样,rownum首先是从1开始计数起的。
rownum是一个序列,是oracle数据库从数据文件或缓冲区中读取数据的顺序。它取得第一条记录则rownum值为1,第二条为2,依次类推。如 果你用>,>=,=,between……and这些条件,因为从缓冲区或数据文件中得到的第一条记录的rownum为1,则被删除,接着取下 条,可是它的rownum还是1,又被删除,依次类推,便没有了数据。
那oracle数据库读取数据的顺序是怎样的呢,是根据你插入数据库的顺序来排的,比如先插入value1,再插入value2,...,再查询出的结果集,顺序是这样的:value1,value2...
一般分页都是这样写的:
select * from
(select rownum as rn, d.* from dept d) d1
where rn >= 1 and rn <= 3这样有点问题,因为先全部查询符合条件的结果集d1的行数可能是很多的,可能你分页的每一页只需要一部分,那大于你行数的数据就没必须查出来了,下面请看。这样再高效:
select * from
(select rownum as rn, d.* from dept d where rownum <=3 ) d1
where rn >=1先查出行数<=3的结果集d1,再从子查询结果集d1中帅选出行数>=1的结果集。这样就避免了全部查出符合条件数据过多。
本文详细介绍了Oracle数据库中的ROWNUM伪列的功能及其在分页查询中的应用。ROWNUM用于给查询结果集中的每一行分配一个唯一的序列号,从1开始递增。文章还对比了两种不同的分页查询方式,并解释了为何第二种方式更为高效。
1万+

被折叠的 条评论
为什么被折叠?



