Oracle三层嵌套分页查询示例及rownum原理
2018-06-18 03:00:54来源:未知 阅读 ()
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不改变,所有的行都被抛弃,所以没有结果。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- Oracle SQLPlus导出数据到csv文件 2020-05-18
- Oracle用decode函数或CASE-WHEN实现自定义排序 2020-05-18
- 【JAVA SE基础篇】14.循环嵌套 2020-05-11
- MyBatis+Oracle在执行insert时空值报错之从源码寻找解决办法 2020-04-15
- Mybatis+Oracle搭配insert空值报错之myBatis+mysql驱动+orac 2020-04-14
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash