oracle rownum函数,oracle rownumber用法

  oracle rownum函数,oracle rownumber用法

  ORACLE中ROWNUM用法概述!

  对于Oracle的rownum问题,很多数据都说不支持,=,=,between.并且,只有上面的符号(,=,=),不是说,=,=,之间.并且会提示SQL语法错误,但往往一条记录都找不到,还会出现看似莫名其妙的结果。其实只要明白这个伪rownum列的意思就不应该感到奇怪,它也是一个伪列。rownum与rowid有些不同。这里有一个例子。

  假设表t1(c1)有20条记录。

  如果从使用rownum 10的t1中选择rownum,C1,只要使用小于号,查出来的结果很容易与概念上的一般理解一致,应该没有疑问。

  如果你可以使用select rownum,C1 from t1 where rownum 10(如果你写下这样的查询语句,此时你应该想得到表中接下来的10条记录),你会发现显示的结果会让你失望。也许你会怀疑是不是有人删除了一些记录,然后查看记录的数量。现在还是20吗?那是什么问题呢?

  我们先了解一下rownum的意思。因为ROWNUM是添加到结果集中的伪列,也就是先找到结果集后添加的列(强调:必须先有结果集)。简单来说,rownum就是合格结果的序列号。它总是从1开始。所以如果没有1,你选择的结果不可能有其他大于1的值。所以你不能期待下面的结果集:

  11 aaaaaaaa

  12 bbbbbbb

  13 ccccccc

  ...

  没有ROWNUM 10的记录,因为如果第一个不满足并被删除,第二个的ROWNUM又变成1,所以永远不会有满足条件的记录。或者可以这样理解:

  ROWNUM是一个序列,它是oracle数据库从数据文件或缓冲区读取数据的顺序。当它获取第一条记录时,rownum值为1,第二条记录为2,依此类推。如果在之间使用,=,=,则.而这些条件,因为从缓冲区或者数据文件中获取的第一条记录的rownum是1,所以会被删除,然后取下一条,但是它的rownum还是1,那么就被删除,以此类推,就没有数据了。

  有了上面从不同方面建立的rownum概念,那么我们就可以用rownum来认识几个现象了。

  1.select rownum,c1 from t1 where rownum!=10为什么返回前九条数据?是否与select rownum,C1 from tablename where rownum10返回的结果集相同?

  因为查询结果集,显示第9条记录后,后面的记录都是一样的!=10或=10,因此只显示前9条记录。也可以理解为rownum是9之后的记录的rownum是10,因为条件是!=10,所以删除,后续记录补充。rownum又是10,也去掉了。如果下降,将只显示前九条记录。

  2.为什么rownum 1时找不到记录,而rownum 0或rownum=1时总是显示所有记录?

  因为rownum是在查询的结果集之后添加的,所以它总是从1开始。

  3.为什么我们能找到1到10之间或者0到10之间的结果,却找不到2到10之间的结果?

  原因同上,因为rownum总是从1开始。

  从表中可以看出,任何时候丢弃记录rownum=1都是错误的,在结果集中是不可或缺的。没有rownum=1,就不能像空中楼阁一样存在,所以你的rownum条件要包含到1。

  但如果只是想用rownum 10的条件,那就要用嵌套语句,让rownum成为老师,然后查询他。

  选择*

  from (selet rownum as rn,t1。*从哪里.)

  其中rn 10

  一般来说,这就是如何在代码中对结果集进行分页。

  此外,虽然rowid和rownum都被称为伪列,但它们以不同的方式存在。rowid可以说是物理存在的,表示表空间中记录的唯一位置id,在DB中是唯一的。只要记录没有被移动,Rowid就是常量。Rowid就像是表中相对于表的一般列,所以rownum的情况不会在rowid的条件下发生。

  还要注意:rownum不能以任何基表的名称作为前缀。

oracle rownum函数,oracle rownumber用法