rownum是一个伪列,并不实际存在。表的每一行并没有一个数字标识,不可能直接查询某行条件位rownum等于某个数字。只有查询的时候排序才会分配rownum,而且只有被指派了rownum才会增长。这就是下面的sql永远不会返回数据的原因。
select *
from t
where ROWNUM > 1;
如下也是不正确的因为where先与order by执行
select *
from emp
where ROWNUM <= 5
order by sal desc;
正确的应该为
select * from ( select * from emp order by sal desc ) where ROWNUM <= 5;
取m到n条的记录
select*From
(select *from
(select emp.*,rownum rno from emp order by empno)where rownum<=9)
where rno>=6;