oracle 学习笔记
来源:互联网 发布:淘宝上的台式机 编辑:程序博客网 时间:2024/06/05 11:09
level
层次查询中有应用。
rownum
用来指示行号
rownum两点注意事项
SQL> --关于rownumSQL> --1. rownum永远按照默认的顺序生成SQL> -- 默认顺序是没有排序时候的顺序,即是对数据进行排序,行号仍然不变SQL> -- 即:名字为 SMITH 的记录行号任然为1。SQL> --2. rownum只能使用< <=;不能使用> >=SQL> select rownum,empno,ename,sal from emp order by sal desc; ROWNUM EMPNO ENAME SAL ------------------------------------------- 9 7839 KING 5000 13 7902 FORD 3000 8 7788 SCOTT 3000 4 7566 JONES 2975 6 7698 BLAKE 2850 7 7782 CLARK 2450 2 7499 ALLEN 1600 10 7844 TURNER 1500 14 7934 MILLER 1300 3 7521 WARD 1250 5 7654 MARTIN 1250 ROWNUM EMPNO ENAME SAL ------------------------------------------- 11 7876 ADAMS 1100 12 7900 JAMES 950 1 7369 SMITH 800 已选择 14 行。
rownum 在 top-n 问题中的应用
-- 一般不在子查询排序;但top-n分析问题中,必须对子查询排序select rownum,empno,ename,sal 2 from (select * from emp order by sal desc) 3 where rownum<=3; ROWNUM EMPNO ENAME SAL -------------------------------------------- 1 7839 KING 5000 2 7788 SCOTT 3000 3 7902 FORD 3000 -- 思路分析: 1.由于rownum随着表的生成而生成,即是对表进行排序,rownum还是不会变的,因此下面语句是错误的。 select * from emp where rownum<=3 order by sal desc EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO------------------------------------------------------------------------------------------ 7499 ALLEN SALESMAN 7698 20-2月 -81 1600 300 30 7521 WARD SALESMAN 7698 22-2月 -81 1250 500 30 7369 SMITH CLERK 7902 17-12月-80 800 20 2.正确的思路: 将排序之后的数据看做一张新表,这张新表中的rownum是有意义的,与top-n是一致的,因此有如下代码: select rownum,empno,ename,sal 2 from (select * from emp order by sal desc) 3 where rownum<=3;
rownum在oracle分页中的使用
需求:分页显示行号 5 - 8 的数据
ROWNUM EMPNO ENAME SAL---------------------------------------------- 1 7369 SMITH 800 2 7499 ALLEN 1600 3 7521 WARD 1250 4 7566 JONES 2975 5 7654 MARTIN 1250 6 7698 BLAKE 2850 7 7782 CLARK 2450 8 7788 SCOTT 3000 9 7839 KING 5000 10 7844 TURNER 1500 11 7876 ADAMS 1100 12 7900 JAMES 950 13 7902 FORD 3000 14 7934 MILLER 1300
注意:rownum只能使用< 、<=;不能使用>、 >=
解决思路:仍然需要构造新表,生成合适的rownum。
解决办法:两层嵌套,先排序,最内层为排序机制,这里使用rownum默认排序机制
SQL> select rownum ,empno,ename,sal 2 from (select rownum r,empno,ename,sal 3 from (select * from emp ) e1 4 where rownum <=8) e2 5 where r>=5; ROWNUM EMPNO ENAME SAL---------- ---------- ---------- ---------- 1 7654 MARTIN 1250 2 7698 BLAKE 2850 3 7782 CLARK 2450 4 7788 SCOTT 3000SQL> select rownum,r,empno,ename,sal 2 from (select rownum r,empno,ename,sal 3 from emp where rownum<=8) 4 where r>=5; ROWNUM R EMPNO ENAME SAL---------- ---------- ---------- ---------- ---------- 1 5 7654 MARTIN 1250 2 6 7698 BLAKE 2850 3 7 7782 CLARK 2450 4 8 7788 SCOTT 3000总结:将内层中的rownum作为外层的普通字段
阅读全文
0 0
- Oracle学习笔记--Oracle入门
- Oracle学习笔记
- 学习ORACLE笔记
- Oracle 学习笔记
- ORACLE学习笔记
- Oracle 认证学习笔记
- Oracle学习笔记
- oracle学习笔记[转]
- Oracle学习笔记
- 转(oracle学习笔记)
- Oracle学习笔记一
- ORACLE学习笔记
- Oracle游标学习笔记
- Oracle 认证学习笔记
- oracle 学习笔记
- oracle学习笔记(一)
- oracle学习笔记(二)
- oracle学习笔记(三)
- 前缀表达式&后缀表达式
- Client-server model
- Friend-Graph
- iOS开发中OC与H5网页交互之OC传值给JS(WKWebView)
- 数论中的一些模板
- oracle 学习笔记
- ISCSI网络存储服务器
- A Secret
- ajax对json的使用
- CaoHaha's staff
- 二叉树排序(前序、中序、后序)
- tensorflow gpu 0.12.1 版本与python对应关系及下载地址
- 第二十天总结
- 多线程快速入门