zoukankan      html  css  js  c++  java
  • Oracle-伪列(rownum)

    1. 列出薪水水平处于第四位的员工。
      思路:要找到薪水处于第四位的员工,那么首先我们先要对薪水进行一个排序。
    select * from emp order by sal desc

    这里要找到排名第四的员工就需要借助rownum—>伪列
    我们先看看伪列到底是什么

    select rownum,emp.* from emp ; 

    这里写图片描述
    这里的rownum和前面的序号一摸一样
    那么如果我们对薪水进行排序,再看看rownum会不会变呢

    select rownum, emp.* from emp order by sal desc;

    这里写图片描述
    我们可以看到当我们对sal这一列进行排序之后,rownum也随之变化了,也就是说rownum是和对应的行绑定的。这里的绑定也就是和我们的emp的顺序是对应起来的。那么我们如何才能取出排名第四的员工呢。
    那么我们就需要对已经排好序的这张表当作一张新的emp1,取他的伪列。

    select rownum,emp1.* from  (select * from emp order by sal desc) emp1 ;

    这里写图片描述
    现在我们可以看到排名第四的员工对应的伪列号也是4了
    其实我们现在可以总结一下,对于rownum来说,它的序列号就是对应的最原始的表,不包括排序之类的,所以如果我们需要排序之后的伪列号,那么我么就需要将排序之后的表当作一种新的表,把新的表当作原始的表。
    那么接下要取出第四的员工,那么我将再将包括rownum的表当作一个新的表emp2,我们只需要一个where语句r=4就可以取出了

    select  emp2.* from (
    select rownum r ,emp1.* from  (select * from emp order by sal desc) emp1 ) emp2
    where r=4;
    
    `` `  
    很奇怪的是这里必须要对rownum重命名,才可以,不知道为啥
    那么我们总结一下:这里我们需要对emp进行两次重命名,第一次是在对薪水排序之后进行重命名,显示对应的伪列,然后第二次重命名是将有伪列的看成一张新的表emp2,取出排名第四的员工
    
    1. 查找EMP表中前5条记录
    我们要找到前5条记录只需要将where语句里面rownum<=5就行了
    
     select rownum, emp.* from emp where rownum<=5;
    
    注意如果前面有rownum,那么这里的*前面就需要添加表名。
    ![这里写图片描述](https://img-blog.csdn.net/20170730213613296?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveGlhb3FpdV9jcg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)  
    
     1. 找EMP表中10条以后的记录。
    
     select emp1.* from(
     select rownum r,emp.* from emp) emp1
     where r >10;
    
    ![这里写图片描述](https://img-blog.csdn.net/20170730214159343?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveGlhb3FpdV9jcg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
    
     1. 查找EMP表中薪水第5高的员工。
    
      select emp2.* from(
      select rownum r,emp1.* from(
      select * from emp order by sal desc) emp1) emp2
          where r =5;
    
    思路和前面的一样这里我就不再赘述了
    
     1. 查找EMP表部门30中薪水第3的员工。
    
      select emp2.* from (
      select rownum r,emp1.* from (
     select * from emp  where deptno=30 order by sal desc) emp1)     emp2
       where r =3 
    
    ![这里写图片描述](https://img-blog.csdn.net/20170730215243400?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveGlhb3FpdV9jcg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)   
    
     1. 查找EMP表中每部门薪水前3的员工。
    
     select emp2.* from(
     select rownum r,emp1.* from (
     select * from emp order by sal desc) emp1) emp2
     where r <=3;
    

    “`
    这里写图片描述
    那么对于rownum的总结就到这里了,欢迎指教
    这里写图片描述

    欢迎关注我的公众号:小秋的博客 CSDN博客:https://blog.csdn.net/xiaoqiu_cr github:https://github.com/crr121 联系邮箱:rongchen633@gmail.com 有什么问题可以给我留言噢~
  • 相关阅读:
    Sqlite框架Delphi10.3(07)
    FastReport 6.8.11在Delphi10.3上的安装
    Delphi 中,InputQuery 函数的妙用
    Javaday25(sax解析xml,json,设计模式)
    并发学习第五篇——volatile关键字
    并发学习第四篇——synchronized关键字
    并发学习第二篇——Thread
    并发学习第一篇——Runnable
    git-仓库迁移并保留commit log
    并发编程理论基础二——画图理解
  • 原文地址:https://www.cnblogs.com/flyingcr/p/10428325.html
Copyright © 2011-2022 走看看