oracle 三层查询,oracle 三层嵌套分页查询

Oracle三层嵌套分页查询--table Aselect * from (select ta.*,rownum r from (select * from A) ta where rownum 5--注: 其实两层就可以,不过,两层嵌套查询不

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

rownum=2为什么不好使?

1 Oracle executes your query.

1.执行查询操作

2 Oracle fetches the first row and calls it row number 1.

2.将第一行的row num置为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.

3.将得到的行的row num与条件相比较,如果不匹配,则抛弃行,如果匹配,则返回行

4 Oracle fetches the next row and advances the row number (to 2, and then to 3, and then to 4, and so forth).

4.oracle获取下一行,然后将rownum增1

5 Go to step 3.

5.返回第3步

从这个原理可以知道,select rownum,name from emp where rownum>5;不返回行,因为首先执行查询select

name from emp,将第1行的rownum标为1,,然后看where条件,为false,则抛弃行,执行第2行,还是rownum标为1,看where条件还为false,所以永远是false,rownum不改变,所有的行都被抛弃,所以没有结果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值