表为
id | name |
---|---|
1 | jack |
2 | jim |
3 | alice |
4 | bob |
5 | dam |
sql:select * from table1 where ROWNUM=1;
输出:1 jack
sql:select * from table1 where ROWNUM=2;
输出:空
sql:select * from table1 where ROWNUM<3;
输出:1 jack;2 jim
sql:select * from table1 where ROWNUM>3;
输出:空
sql:select * from table1 where ROWNUM=1 or ROWNUM>2;
输出:1 jack
rownum是伪列,是逻辑存在的。先查询到符合要求的结果集,然后再加上rownum列,它永远从1开始。所以如果 where 条件里跳过了ROWNUM=1的值,比如直接写成 ROWNUM>3,那么将永远没有满足条件的值。
如果一定要使用 where ROWNUM>3,需要把rownum显式地生成为普通一列
select * from (select rownum, table.* from table) where rownum>3;
rowid也是伪列,但它是物理存在的,任何一条数据在oracle中创建的时候就会默认生成一个rowid,固定且唯一
sql:select rowid from table1;
输出