oracle虚列中不能使用>的问题

   关于Oracle 的 rownum 问题,它只能用如下运算符号“<、<=、!=”,而!=使用的时候相当于<的效果。而使用“>、>=、=、between..and”运算符号时,只要开始值大于1,则就会无结果显示。因为rownum总是从1开始的,第一条不满足去掉的话,第二条的rownum 又成了1。依此类推,所以永远没有满足条件的记录。

   rowid 与 rownum 虽都被称为伪列,但存在方式不一样:
   rowid 是物理存在的,表示记录在表空间中的唯一位置ID,在DB中是唯一的。只要记录没被搬动过,rowid是不变的。它相对于表来说又像表中的一般列,所以,以 rowid 为条件就不会有rownum那些莫名其妙的结果出现。

    rownum不能以任何基表的名称作为前缀。是对结果集加的一个伪列,即先查到结果集之后再加上去的一个列 (强调:先要有结果集)。简单的说 rownum 是对符合条件结果的序列号。
    可以这样理解:rownum是一个序列,是Oracle数据库从数据文件或缓冲区中读取数据的顺序。它取得第一条记录则rownum值为1,第二条为2。依次类推。

可以直接理解为:使用rownum对数据进行查询时,开始值知道大于1就会无结果显示,要想查询伪劣第3行到第9行的值就得使用嵌套的写法:
SELECT  * FROM  (SELECT  rownum  as num,ename,sal FROM emp WHERE rownum<=9 )
     WHERE num>=3
注:如果子查询里rownum不起别名的话同样不能用大于符号。

你可能感兴趣的:(oracle,sql)