rownum伪例

1.rownum是个伪列,不属于任何表,所以不可以在其前面加上任何表名

2,rownum是对结果集的编序排列,始终是从1开始

3,rownum只能用于<

select rownum ,empno ,ename,job,mgr,hiredate  
from emp where rownum <2

4,如果要用>实例化就可以了

SELECT empno, ename, job, mgr, hiredate
 FROM (SELECT empno, ename, job, mgr, hiredate, 
     rownum rk
    FROM emp) t
WHERE rk > 2

5,为什么不能用>呢?

rownum是依据查询的过程而临时产生的,并不是已在数据库中存在的数据列。

在查询语句的执行中,数据库先查询出结果集,在根据结果集形成对应的rownum,

而且rownum始终是动态的从1开始进行记录的。

6,rownum<10和rownum!=10结果集相同

查找rownum!=10的数据的过程可以这样理解:当查找前9条数据的时候,

rownum都是不等于10的或是可以理解为都是小于10的,

所以结果集会出现这9条数据,而当数据库查到第10条数据的时候,

发现rownum=10而不满足不为10的条件,所以数据库将第十条数据删除形成新的结果集,

而最开始的rownum=11的数据将被补充到第十条数据的位置而被分配了rownum=10,

以此类推,每次删除第十条都被下一条补上而且补上的数据rownum被重新分配为10.

这样的话永远也查不到第十条及其往后的数据。

猜你喜欢

转载自minyongcheng.iteye.com/blog/2184892