Oracle三层嵌套分页查询示例及rownum原理
eg:COMPONENT表数据如下
1.执行select * from (select com.*,rownum r_num from (select * from COMPONENT)com where rownum < 8) where r_num > 2
2.执行 select * from (select com.*,rownum r_num from (select * from COMPONENT)com where rownum =1) where r_num < 5
3. select * from (select com.*,rownum r_num from (select * from COMPONENT)com where rownum =2) where r_num < 5
原因:
rownum是oracle根据查询动态生成额,产生rownum之前不看where条件子句,所以当查询一条结果时,rownum被oracle初始化为1, 这时执行where子句,
成立则继续,否则则丢 弃,这也就是为什么rownum=1 rownum<n好使的原因。
rownum=2不好使是因为:
1.执行查询操作
2.将第一行的row num置为1
3.将得到的行的row num与条件相比较,如果不匹配,则抛弃行,如果匹配,则返回行
4.oracle获取下一行,然后将rownum增1
5.返回第3步
同理,select rownum,id from COMPONENT where rownum>2也不返回行,因为先执行查询select id from COMPONENT,将第1行的rownum标为1,然后看where条件,1<2为false,则抛弃行,执行第2行,还是rownum标为1,看where条件还是1<2为为false,所以永远是false,rownum不改变,所有的行都被抛弃,所以没有结果。
上一篇: 小程序中如何用echarts