想看排版格式好一点,重点突出点的就直接到我的blog里面去看吧,这里颜色不好标记,就将就一下。很多人都在问这方面的问题,这里我就给大家解释了为什么rownum>N,rownum<N,这些原理是什么,大家看吧,可以讨论。原文网址:http://blog.csdn.net/lovingprince/archive/2008/07/09/2629154.aspxoracle中rownum伪字段用得比较频繁,特别是分页之中,但是由于它的一些特殊性很多人可能并不理解它的实际行为,网络上有很多文章介绍这个 rownum的用法,但是很多都讲得非常模糊,或者就是不太全面,大家看起来也非常痛苦,在这里我将给大家全面讲解一下,希望对大家有所帮助:       首先我们来认识几点rownum的特殊性:               第一、rownum是在记录输出的时候才一步一步的产生的。
       第二、rownum始终都是从1开始的。          记住以上两点,基本上你也算是非常了解这个伪字段的用法了,下面我来具体分析一下这些特殊性。我们考察如下的 SQL语句:          select * from Test where rownum >=1;     select * from Test where rownum >=2;      select * from Test where rownum <= 10;   假设Test表有15条记录,这里第一条SQL输出15条记录,第2条SQL输出0条,第3条SQL输出10条记录。    为什么呢?上面我说过了,由于它的特殊性,rownum是在记录输出的时候才产生,所以我们按照下面的步骤来处理:    1)任何在同一条SQL上出现的rownum我们都可以先忽略掉,然后这三条SQL语句都只有select * from Test    2) 我们此时输出记录,当输出第一条记录时,此时oracle会给它安排他的rownum=1,前面也说过了(rownum始终都是从1开始的)   3)这个时候加上rownum的where条件来筛选这条记录是否满足,我们发现,只有第一条SQL和第3条SQL满足rownum>=1和rownum<=10,而第2条SQLrownum>=2,明显不满足,因为输出的第一条记录rownum=1.   4)输出第2条记录,此时第1条SQL和第3条SQL由于前面都有一条满足条件的记录了,此时rownum会安排成2,明显第2条记录也满足需求。我们再来看第2条SQL语句,我们此时输出第2条记录,但是由于之前输出的一条记录被它否决了,即不满足条件,这时的输出的第2条记录rownum仍然等于1,注意了哦,很多人不明白为什么,其实很简单,rownum始终都是从1开始的,只有前面输出了一条满足条件的记录之后,后面的记录rownum才会增加。--简单吧,所以这里对于第2条SQL来讲,他的这个记录rownum还是等于1,又不满足条件。   5)记录处理其他记录。    按照上面的的方法你就可以处理任何关于rownum的sql了,比如:  select * from Test where rownum >=1  and id>5 order by id asc; 按照上面的方法,首先去掉rownum,然后剩下 select * from Test where  id>5 order by id asc; 这里弄完了会输出结果,然后循环的处理每一条记录,有满足条件的rownum就增加,没有满足条件的记录就不增加。就这么简单。 还有一点要注意,这个rownum的处理过程是针对同一层SQL而言,也就是select 和rownum处于同一个层次才能这么做。如果是嵌套SQL,特殊情况特殊分析。   例如:   select * from(  select * from Test where  id>5 and rownum<=6)  t  where rownum >=1 order by t.id asc 上面颜色相同的处于同一个层次。