• 分页查询 -集合操作


    分页查询

    --分页查询 ROWNUM
      SELECT ROWNUM,ENAME,SAL,DEPTNO
      FROM EMP
      WHERE ROWNUM BETWEEN 6 AND 10;

    上面的分页查询 已经查询了数据但是为什么查询不出数据?

    答:--这个是查询不出任何数据的.因为rownum>1 后 rownum从1开始 但是他的值一直大于一 

    --rownum不可以自增1 所以导致数据不能向下走 数据不可以被查出来。

                                                                                                                               上面昨日遗留问题                                 

    分页查询案例
    --
    把rownum 加进去的当做一张表查询 查询6-10 之间的值 SELECT * FROM (SELECT ROWNUM AS IDD ,ENAME,SAL,DEPTNO FROM EMP ) WHERE IDD BETWEEN 6 AND 10;
    --注意这里一定要给别名 否则数据库不认为 是要查询该表里面字段
     --题目:查找公司工资排名的6-10名
      SELECT *FROM
      (SELECT ROWNUM AS ISS ,ENAME,SAL FROM (SELECT ENAME,SAL FROM EMP
     ORDER BY SAL DESC) )
     WHERE ISS BETWEEN 6 AND 10;
    --最里面的一层查询 是排序  外面的一层是 加rownum   只要排序就需要两层查询
      --题目:查找公司工资排名的6-10名
      SELECT *FROM
      (SELECT ROWNUM AS ISS ,ENAME,SAL FROM (SELECT ENAME,SAL FROM EMP
     ORDER BY SAL DESC) 
     WHERE ROWNUM <=10)
     WHERE ISS >=6;

    DECODE函数(参数,参数,参数...)

    可以实现分支结构

     --DECODE函数   可以实现分支结构
     SELECT ENAME,JOB,SAL,DECODE(
      JOB,
      'MANAGER',SAL*10,
      'ANALYST',SAL*5,
      'CLERK',sal*2,
      sal
     ) 工资
     FROM EMP;
     --DECODE函数   可以实现分支结构
      SELECT ENAME,JOB,SAL,DECODE(
      JOB,
      'MANAGER',SAL*10,
      'ANALYST',SAL*5,
      'CLERK',sal*2
      
     ) 工资
     FROM EMP;
     --如果没有default条件  不满足条件的填null
     --利用decode函数将MANAGER,ANALYST划分为一组
     SELECT COUNT(*),DECODE(
     JOB,
     'MANAGER','VIP',
     'ANALYST','VIP',
     'OTHER'
     )
     FROM EMP
     GROUP BY DECODE(
     JOB,
     'MANAGER','VIP',
     'ANALYST','VIP',
     'OTHER'
     ) 
    --利用decode函数将想要按自己的排序进去操作
     SELECT DISTINCT DEPTNO,DNAME FROM DEPT
     ORDER BY DECODE(
     DNAME,
     'ACCOUNTING',1,
     'OPERATIONS',2,
     'RESEARCE',3,
     4
     );

    CASE语句

    与DECODE函数用法相似

    --case语句
       SELECT ENAME,JOB,SAL,CASE
      JOB
      WHEN 'MANAGER' THEN SAL*10
      WHEN 'ANALYST'THEN SAL*5
      WHEN 'CLERK' THEN sal*2
      ELSE SAL END
      工资
     from EMP;

     

    排序函数

    排序函数允许对结果集按照指定的字段分组在组内要按照指定的字段排序,最终生成组内编号

    1.ROW_NUMBER()  OVER(

    PARTITON BY 字段名

    )

    --利用排序函数ROW_NUMBER()函数  查看每个部门的工资排名
     SELECT DEPTNO,ENAME,SAL,ROW_NUMBER() OVER(
     PARTITION BY DEPTNO
     ORDER BY SAL DESC
     ) SORTT
     FROM EMP

    2.RANK函数

    生成组内个连续也不唯一的数字,同组内排序字段值一样的记录,生成的数字也一样

     --RANK函数   生成组内不连续也不唯一的数字,同组内排序字段一样的记录,生成的数字也一样
     SELECT DEPTNO,ENAME,RANK() OVER(
     PARTITION BY DEPTNO
     ORDER BY SAL DESC 
     ) SORTT
     FROM EMP

    注意 这里重复了4 没有按照顺序出现5.

    集合操作

    并集、交集、差集

    1.并集(两个条件都要兼顾 只要有一个 结果就会显示)

    UNION

     SELECT ENAME,JOB,SAL FROM EMP
     WHERE JOB='MANAGER'
     UNION
     SELECT ENAME,JOB,SAL FROM EMP
     WHERE SAL>2500;

    UNION ALL

     SELECT ENAME,JOB,SAL FROM EMP
     WHERE JOB='MANAGER'
     UNION ALL
     SELECT ENAME,JOB,SAL FROM EMP
     WHERE SAL>2500;

    UNION和UNION ALL 最大的区别:第一个 不会将重复的显示出来,第二个会将重复的显示出来

    2.交集(显示两者都满足的条件的数据)

    关键字:

    INTERSECT
    --交集(取结果集内共有的记录)
      SELECT ENAME,JOB,SAL FROM EMP
     WHERE JOB='MANAGER'
     INTERSECT
     SELECT ENAME,JOB,SAL FROM EMP
     WHERE SAL>2500;

    3.差集(满足上边但不满足下边)

    关键字:

     MINUS
     --差集  满足上边条件但是不满足下边
      SELECT ENAME,JOB,SAL FROM EMP
     WHERE JOB='MANAGER'
      MINUS
     SELECT ENAME,JOB,SAL FROM EMP
     WHERE SAL>=2500;

    高级分组函数

    主要用于GROUP up中

    1.ROLLUP()

    分组原则,参数逐渐递减,一直到所有参数都没有,每一种分组统计一次结果,并在一个结果集内显示。

     --查看每天每月每年 以及总共的营业额
     SELECT year_id,month_id,day_id,sum(sales_value)
     FROM sales_tab
     GROUP BY ROLLUP(year_id,month_id,day_id)

    结果:最后参数再逐渐递减直到没有

    2.CUBE()

    每种组合分一次组,分组的次数是2的参数个数次方

     SELECT year_id,month_id,day_id,sum(sales_value)
     FROM sales_tab
     GROUP BY CUBE(year_id,month_id,day_id)

    这个函数不过是把参数组合的所有情况都显示出来。

    3.GROUPING SETS ()

    每个参数是一种分组方式,然后将这些分组统计后并在一个结果集内显示

     --GROUPING SETS   只看 相同日相同月的(自己可定义)  可以满足
      SELECT year_id,month_id,day_id,sum(sales_value)
     FROM sales_tab
     GROUP BY GROUPING SETS((year_id,month_id,day_id), (year_id,month_id))

    参数自己可以定义自己想看的结果。

  • 相关阅读:
    用友U8 | 【出纳管理】出纳日记账生成的凭证如何删除?
    转载--如何为chart上的点添加标注
    转载--跨域请求CORS和jsonp
    转载--闭包的使用场景
    转载--闭包的优缺点
    转载--对称加密与非对称加密
    转载--XSS漏洞原理和利用
    转载--强缓存与协商缓存
    转载--CSS常见布局
    转载--透过浏览器看HTTP缓存
  • 原文地址:https://www.cnblogs.com/lchh/p/9331083.html
Copyright © 2020-2023  润新知