经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库/运维 » Oracle » 查看文章
Oracle中的rownum
来源:cnblogs  作者:人在风雨中  时间:2019/8/8 8:48:29  对本文有异议

 

    请耐心看完,特别是这儿学的乱的

一点点看底面的代码分析你一定会懂的

 

rownum:是伪号的意思,Oracle专有,不属于任何表,但是任何表都可以使用!

 

作用:用以给查询出来的所有元组加上行号

 

规则:1,默认是从1开始,依次递增。

   2,不能去点rownum

   3,rownum写在哪个select中,这个select语句条件后就不能用rownum>某个数字,可以<某个数字,因为是默认是从1开始的,我们如果rownum>某个数字,条件就一下不满足了,查询结果就是空的,很抽象,我们来看一下 下面的代码

 

这是根据scott用户下的emp表做的一个练习

题目是:--查询emp表中顺序在6-10的员工信息

  1. 思路:首先,我们要查全部员工是不是这样:
    select * from emp;


  1. 然后我们给这些员工加序号
    select rownum,emp.* from emp;  --注意,*前面要加上表名去点它了


  1. 排好序后我们就可以挑选序号了,首先规则3里面说的rownum在哪个select中,这个select条件后就不能使用大于号,所以我们先使用小于号,小于号可以使用,我们先选出1-10
    select rownum,emp.* from emp where rownum<11;


  1. 然后我们怎么给它加大于号呢?嵌套,刚才说,rownum在哪个select中,这个select条件后就不能使用大于号,但不代表外部的select不能用,然后我们把上面select当成一个表嵌套在一个新的select
    select * from (select rownum r,emp.* from emp where rownum<11) e where e.r>5;  --注意,rownum后我加了别名了,规则2里面说的不能去点rownum,我们可以给它加别名去点它,e是给嵌套的表
    取得别名,用来取出里面的rownum
  1.  
  1.  

 

 

再来一个题目吧:

--查询工资排名6-10人员的姓名   -->注意,这儿多了一个条件,多了工资要排序

  1. 第一步,我就罗嗦的写下,查询所有人员的姓名
    select ename from emp;



  1. 第二步,我们用order by 以工资的降序来排名
    select ename from emp order by sal desc;



  1. 第三步,重点来了,我们不能在上面的句子中加rownum,因为SQL语句的执行顺序是:from--where--group by--having--select--rownum--order by
        大家想想,根据SQL顺序,我们在上面加了rownum排好了123456行后,最后执行的order by一下就给打乱了对不对,我给大家演示一下错误的,
        我先执行select rownum,ename from emp;再执行select rownum,ename from emp order by sal desc;大家看看差别:
       
  1. 是不是顺序乱了,所以我们不能在select ename from emp order by sal desc;也就是第二步代码上直接加rownum,我们这个时候还得还得用嵌套,该怎么理解呢?
    你不是order by最后执行吗,那好我先让你根据order by排序好工资从高到低,然后我给你的order by这个select 外面套一个select,这个select用来给排好工资
    的表加上序号,大家看下代码理解一下:
    select rownum,e.ename from (select ename from emp order by sal desc) e;
 第四步:上图中看到,我们已经把工资从高到底排好,并且给排好后的工资加了序号,这个时候我们就可以挑选了

select ename from(
          select rownum r,e.ename from(select ename from emp order by sal desc) e where rownum<11
) e1 where e1.r>5;

 

 

以上代码大家可以取PLSQL亲自敲一下,助于理解。 

规则总结的不准确的或有缺失的点,内容有错误的欢迎指正!

谢谢!

 

 作者:人在风雨中

 出处:https://www.cnblogs.com/xuqx/ 

 欢迎转载,转载请标明出处。

 如果你觉得本文还不错,对你的学习带来了些许帮助,请帮忙点击右下角的推荐

原文链接:http://www.cnblogs.com/xuqx/p/11316928.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号