• Oracle数据库分页查询与decode函数


    分页查询

      rownum:是数据库中提供的一个伪劣,作用是给记录分配行号。

       思想:先给记录分配行号,再根据我们要查找的范围进行检索,确定行号的范围。

      练习1:查询员工信息,同时分配行号

        select e.*,rownum from emp e;

      练习2:查询前5条员工的信息

        select e.*,rownum from emp e where rownum<6;

      练习3:查询员工表中的第6条到第10条

        select * from (select e.*,rownum ro from emp e) where ro between 6 and 10;

      练习4:查询第5页每页记录数为3

        select * from (select e.*,rownum ro from emp e) where ro between 13 and 15;

    decode函数

      格式:decode(colName,search1,result1,[search2,result2].......,default);

      逻辑:检索colName的值,如果是search1,那就使用result1

                  如果是search2,那就使用result2

                  如果是search3,那就使用result3

                  ......

                  否则使用default

                  没有default,返回的是null。

      练习1:年终发奖金,职位是'MANAGE R'发放月薪的1.2倍,'SALESMAN',发放月薪的1.1倍,'CLERK'发放月薪的1.05倍,其他月薪作为奖金,查询每个人年终奖以及姓名和职位 

       select ename,job,decode(job,'MANAGER',1.2,'SALESMAN',1.1,'CLERK',1.05,1)*sal  from emp ;

      注意:Mysql中没有decode函数这个用法。

    case when

      

      与decode函数功能相同。

      格式:case colName when search1 then result1

                when search2 then result2

                ......

                else reulst0 end

      同上个练习:

      select ename,job,case job when 'MANAGER' then 1.2*sal when 'SALESMAN' then 1.1*sal when 'CLERK' then 1.05*sal else sal end from emp;

     

    decode函数与group by连用:

      练习1:职位'MANAGER' 和'SALESMAN' 属于vip,职位'CLERK'属于svip,其他的属于ip,查询三种级别的人数 

         select le,count(*) from (select decode(job,'MANAGER','vip','SALESMAN','vip','CLERK','svip','ip') le from emp)t group by le order by count(*); 

      练习2:排序规则,accounting排第一,sales排第二位,research排第三位,operations排第四位

         select dname,le from (select dname,decode(dname,'ACCOUNTING',1,'SALES',2,'RESEARCH',3,'OPERATIONS',4)le from dept)t order by le desc;

    排序函数

      写在select子句中

      1-->row_number() over(partition by colName1 order by colName2) 连续不重复

      2-->rank() over(partition by colName1 order by colName2) 不连续重复

      3-->dense_rank() over(partititon by colName1 order by colName2) 重复连续

      练习1:查询所有员工信息,按照月薪排序

        select e.*,dense_rank() over ( order by sal desc) from emp e;

      练习2:区间查询练习

         select * from (select e.*,dense_rank() over ( order by sal desc) rn from emp e) where rn>1 and rn<5;

  • 相关阅读:
    Laravel框架中的event事件操作
    PHP魔术方法实例
    PHP 面向对象
    ThinkPHP中where()使用方法详解
    PHP常见错误提示含义解释
    php面向对象编程self和static的区别
    php文件路径获取文件名
    php三种无限分类
    php高精度计算问题
    转:JavaScript定时机制、以及浏览器渲染机制 浅谈
  • 原文地址:https://www.cnblogs.com/lyr999736/p/9045629.html
Copyright © 2020-2023  润新知