前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Oracle 分页「建议收藏」

Oracle 分页「建议收藏」

作者头像
全栈程序员站长
发布2022-09-01 10:32:04
5900
发布2022-09-01 10:32:04
举报

大家好,又见面了,我是你们的朋友全栈君。

1.ROWNUM: 概念:OORACLE使用ROWNUM是一个伪列,数据库提取记录才会生成的数值1,2,3,4 作用是用于实现ORACLE的分页必须使用子查 询实现

执行流程(带条件) : a.查询EMPLOYEES表,生成EMOLYEES伪列 b.根据分页条件判断该ROWNUM是否与该条件匹配 c.条件匹配,取出该条条件 d.生成第二个ROWNUM重复r操作

Oracle 分页「建议收藏」
Oracle 分页「建议收藏」

2.别名问题 由于ROWNUM的WHERE判断执行在SELECT关键字之前。当前查询中的ROWNUM别名不能用于条件做判断,别名只可以用一外部条件判断(无排序时可以作为<=判断,这时候ROWNUM满足条件)。

3.ROWID是数据库保存记录时候生成的真实物理地址,唯一不变 作用:数据库操作记录使用 索引值→ROWID→将ROWID换成算成一行数据的物理地址→得到一行数据 如:提取员工表的前三行数据

Oracle 分页「建议收藏」
Oracle 分页「建议收藏」

如:提取4行之后的数据 错误例子:SELECT ROWNUM,EMP.* FROM EMP WHERE ROWNUM > 3 –错误 生成第一个ROWNUM(第一列永远是1),进行条件判断是不符合,无法提取结果,结果为NULL 解决方案:先查询带ROWNUM的伪表SELECT ROWNUM,EMP.* FROM EMP查询伪表,选出4条以后的数据SELECT * FROM(SELECT ROWNUM R,EMP.* FROM EMP) RE WHERE RE.R > 3

Oracle 分页「建议收藏」
Oracle 分页「建议收藏」

1.提取工资排行前三的员工

Oracle 分页「建议收藏」
Oracle 分页「建议收藏」

虽然查询了结果,但是并不是前工资排名前三的员工, 原因分析:WHERE条件的执行在ORACLE BY 之前,分页就是先生成了ROWNUM之后才进行,显然者时候序号已经生成好 正确的是SELECT * FROM EMP ORACLE BY SALARY DESC先排序,SELECT ROWNUM,E.* FROM (SELECT * FROM EMP ORACLE BY SAL DESC) E WHERE ROWNUM BETWEEN 1 AND 4

2.提取6到10的记录数据效率

Oracle 分页「建议收藏」
Oracle 分页「建议收藏」

我要提取的数据是6到10之前的数据,把不需要用到的数据过滤掉,提高效率后的写法,只进行提取分页(表数据多是效率会极低)。 如图下。

Oracle 分页「建议收藏」
Oracle 分页「建议收藏」

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/140115.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年5月2,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档