Oracle 伪列: ROWNUM 应用与总结

来源:互联网 发布:mysql 修改字段长度 编辑:程序博客网 时间:2024/06/09 20:44

1. ROWNUM 原理

ROWNUM 是根据 SQL 查询出的结果给每行分配一个逻辑编号, 每行数据会因为输出的顺序不同而获得不同的逻辑编号, 编号是从 1 开始的;

SELECT empno, ROWNUM FROM emp;  -- 查询 scott 用于 emp 表中, empno 和对应的 ROWNUM

rownum_demo

-- 错误演示:SELECT e.ROWNUM FROM emp;-- 此种写法是错误的!

error

-- 以下是所有错误范例-- 错误 1: SELECT * FROM emp WHERE ROWNUM BETWEEN 2 AND 5;-- 错误 2: SELECT * FROM emp WHERE ROWNUM >= 2 AND ROWNUM <= 5;

解答: 为什么不能直接在 WHERE 子句中, 使用: ROWNUM BETWEEN 2 AND 5 ?

2. ROWNUM 应用

2.1 Top N 结果输出

-- 输出结果的前 N 条数据, 可以通过 ROWNUM 是实现SELECT empno FROM emp WHERE ROWNUM < 5; -- 输出前 4 条数据

show

2.2 分页查询

分页查询是经常用到的一种应用需求
本文演示 3 种实现方式:

-- way 1: SELECT * FROM (    SELECT e.*, ROWNUM rn FROM emp e) aWHERE a.rn BETWEEN 2 AND 5;-- 效率最低
-- way 2: SELECT e.*, ROWNUM rn FROM emp e WHERE ROWNUM <=5MINUSSELECT e.*, ROWNUM rn FROM emp e WHERE ROWNUM <=1;-- 效率较高
-- way 3: SELECT * FROM (    SELECT e.*, ROWNUM rn FROM emp WHERE ROWNUM <=5) aWHERE a.rn>=2;-- 效率最高

demo

2.3 分组子排序

  -- 暂时没有实现

请参看, CONAN ZONE 博客中的总结: 利用ROWNUM做分组子排序

3. 参考文档

  • Oracle中ROWNUM的使用技巧 本文主要参考此博文中, 博主在博文中更加系统地分析了每种 SQL 语句的运行效率, 和一些高级应用主题;
  • Oracle 伪列总结, 本文主要是简单的总结了 Oracle 中的基本概念和基本使用, 适合快速入门;
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 大四体育老师不给成绩怎么办 大四必修挂科了怎么办 大学挂了20科怎么办 大专重修都没过怎么办 如果孩子一年级就考不及格怎么办 后滚翻做不过去怎么办 练习颠球时脚面总网上翘怎么办 踢完足球腿疼怎么办 针对初中不听话的学生怎么办 初中一年级成绩太差怎么办 新牙长出来乳牙没掉怎么办 小孩乳牙没掉就长出新牙怎么办 复读一年还考大专怎么办 宝贝刚上幼儿园哭怎么办 新入幼儿园宝贝老是哭怎么办 孩子不太会说话幼儿园不要怎么办 幼儿上台表演害羞胆怯怎么办 小学转学学校不接收怎么办 在校读书的留守儿童怎么办 足球比赛中裁判碰到球怎么办 花盆的土变硬板结怎么办 lol皮肤不想要了怎么办 泉州小黄人自行车被偷怎么办 小学数学没学好上初中怎么办 50天的宝宝缺钙怎么办 5个月的宝宝缺钙怎么办 空调接电后指示灯不亮怎么办 欧普led灯坏了怎么办 led灯条芯片坏了怎么办 太阳能板只有电压没有电流怎么办 农村按空调房屋不保温怎么办 自己一个人想去足疗店不敢去怎么办 吊灯led灯坏了怎么办 办健身卡老板携款跑路了怎么办 武安丰尚健身怎么办卡 热敷后眼睛肿了怎么办 两眼视力差距大怎么办 怀孕体重长得快怎么办 怀孕初期发胖6斤怎么办 孕早期长得太快怎么办 怀孕了肚子眼脏怎么办