介绍RowNum之前首先引入伪列的概念,伪列是数据库术语,物理上该列并不存在,只有当查询时才被数据库构造出来。伪列通常是自由分配的,用户无法更改。
RowNum在查询时,每执行一次都是从1开始,直到该行被输出,举个例子:
select * from hr.employees where RowNum > 5
查询的时候系统首先查找RowNum = 1的行,发现不符合RowNum > 5,然后进行下一次查询,下一次查询还是从RowNum = 1进行查询,一直重复,这样是不可能查到值的。
那我们要怎么样才能够取到RowNum > 5的值呢?看代码
select * from (
(select rownum r, e.* from hr.employees e)tab1
)where r > 5;
在上面代码中我们首先通过(select rownum r, e.* from hr.employees e)tab1
将原来hr.employees表中的所有的数据再加上一列r,放入到新表tab1中。在tab1中,r已经不是伪列,因此可以就通过r > 5进行筛选了。