本文主要介绍了ROWNUM在ORACLE数据库中的用法的详细说明。对于rownum,它是oracle系统分配给查询返回的行的序列号,rownum不能以任何表名为前缀。让我们跟着边肖学。
ORACLE 中ROWNUM用法总结!
对于Oracle的rownum问题,很多数据都说不支持,=,=,between.并且,只有上面的符号(,=,=),不使用,gt;=,=,在之间.并且会提示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不能以任何基表的名称作为前缀。
关于ROWNUM在ORACLE数据库中的用法的详细说明,本文到此为止。有关ORACLE数据库中ROWNUM的更多信息,请搜索我们以前的文章或继续浏览下面的相关文章。希望你以后能支持我们!