1、rownum是对结果集加的一个伪列,即先查到结果集之后再加上去的一个列 (强调:先要有结果集)。简单的说 rownum 是对符合条件结果的序列号。它总是从1开始排起的。所以你选出的结果不可能没有1,而有其他大于1的值,这是为什么Oracle的伪列rownum不支持>,>=,=,between...and,而都用<比较
2、rowid 与 rownum 虽都被称为伪列,但它们的存在方式是不一样的,rowid 可以说是物理存在的,表示记录在表空间中的唯一位置ID,在DB中唯一。只要记录没被搬动过,rowid是不变的。rowid 相对于表来说又像表中的一般列,所以以 rowid 为条件就不会有 rownum那些情况发生
3、oracle系统为了实现完整的关系数据库功能,系统专门提供了一组成为伪列(Pseudocolumn)的数据库列,这些列不是在建立对象时由我们完成的,而是在我们建立时由Oracle完成的。Oracle目前有以下伪列:
伪列:
CURRVAL AND NEXTVAL 使用序列号的保留字
LEVEL 查询数据所对应的级
ROWID 记录的唯一标识
ROWNUM 限制查询结果集的数量
伪表
DUAL
该表主要目的是为了保证在使用SELECT语句中的语句的完整性而提供的
对应一道oracle面试题:
查出一个超过100条以上查询结果集10到100行之间的数据
select * from tbl_nvhl_policy where rownum<100 minus select * from tbl_nvhl_policy where rownum<10