对于rownum来说它是oracle系统顺序分配为从查询返回的行的编号,
返回的第一行分配的是1,第二行是2,依此类推,这个伪字段可以用于限制查询返回的总行数,而且rownum不能以任何表的名称作为前缀。
所以上面几条能够查到记录。
select * from product where rownum between 1 and 30
select * from product where rownum <20
select * from product where rownum = 1
select * from (select rowId A,t.* from product t ) where A like'%A%'
使用rownum>N做条件,不可能查到记录。
select * from product where rownum >20
select * from product where rownum between 20 and 30
select * from product where rownum = 2
原理
1 Oracle executes your query.
2 Oracle fetches the first row and calls it row number 1.
3 Have we gotten past row number meets the criteria(基准,条件)? If no, then Oracle discards(丢弃) the row, If yes, then Oracle return the row.
4 Oracle fetches the next row and advances the row number (to 2, and then to 3, and then to 4, and so forth).
5 Go to step 3.