在oracle中分页,我们会用到rowid和rownum
rowid和rownum都是虚列,但含义完全不同。rowid是物理地址,用于定位oracle中具体数据的物理存储位置,而rownum则是sql的输出结果排序。通俗的讲:rowid是相对不变的,rownum会变化,尤其是使用order by的时候。
例如有如下一张表 :USER
name | age |
张三 | 20 |
李四 | 22 |
王五 | 23 |
当执行查询 : select rowid ,rownum ,name,age from USER order by age asc 时结果如下:
rowid | rownum | name | age |
AAAOWhAAQAAALgdAAa | 1 | 张三 | 20 |
AAAOWhAATAAALp7AAd | 2 | 李四 | 22 |
AAAOWhAATAAALp7AAe | 3 | 王五 | 23 |
当执行查询 : select rowid ,rownum ,name,age from USER order by age desc 时结果如下:
rowid | rownum | name | age |
AAAOWhAATAAALp7AAe | 1 | 王五 | 23 |
AAAOWhAATAAALp7AAd | 2 | 李四 | 22 |
AAAOWhAAQAAALgdAAa | 3 | 张三 | 21 |
分页的语句
-------使用rownum
select * from(select a.*,rownum rn from(select * from goodstype) a where rownum<9)where rn>4;
goodstype---表示我的表名 a表示select * from goodstype集合
-------使用rowid
select * from goodstype where rowid in
(select rid from (select rid,rownum rn from (select rowid rid from goodstype) gs where rownum<9) where rn>4)
goodstype---表示我的表名 gs表示select * from goodstype集合