Oracle三层嵌套分页查询
--table A
select * from (select ta.*,rownum r from (select * from A) ta where rownum < 10) where r > 5
--注: 其实两层就可以,不过,两层嵌套查询不会用到oracle的外层条件内推机制,效率慢了点
rownum原理:
很简单,rownum是oracle根据查询动态生成额,记住,产生rownum之前不看where条件子句,所以当查询一条结果时,rownum被oracle初始化为1,
这时执行where子句,成立则继续,否则则丢弃,这也就是为什么rownum=1 rownum<n好使的原因。
rownum=2为什么不好使?
1 Oracle executes your query.
1.执行查询操作
2 Oracle fetches the first row and calls it row number 1.