• 分页查询


    *3.分页查询
      不同数据库分页查询方法不同,Oracle采用rownum列实现
    分页查询;而MySQL采用的是limit实现。
     
      1)rownum列
       rownum列是Oracle自动添加的。默认是隐藏的,
    一般被称为伪列。该列值记录的是记录的行编号。
      在建表或执行一个select查询后,Oracle都会自动追加
    rownum列,在载入数据时形成一列顺序的记录行编号。
      //取出EMP的前5条记录
      select empno,ename,sal,rownum
      from emp
      where rownum<=5;
      //取出EMP中工资最高的前5条记录.
     select empno,ename,sal,rownum
     from(
      select empno,ename,sal
      from emp
      order by sal desc
      )
     where rownum<=5;
      //查询工资最低的前5个员工
    select empno,ename,sal
    from(
      select empno,ename,sal
      from emp
      order by sal
    )
    where rownum <=5;
     
      //查询最早入职的前5个员工
    select empno,ename,hiredate
    from(
     select empno,ename,hiredate
     from emp
     order by hiredate
    )
    where rownum<=5;
     
    ======如何获取前n条记录=========
     1)先按照排序字段进行记录的排序(构建临时的数据源)
       将要抓取的记录排在前面。
     2)将上面查询结果当做数据源进行查询,where条件部分
      使用rownum<?或rownum<=?条件
     注意:rownum字段当条件时不允许使用>,>=条件。
     =条件只可以使用=1.
     
    =========================
    //取工资最高的排在第5(不包含)-10位的员工
    select empno,ename,sal
    from(
      select empno,ename,sal,rownum rn
      from(
         select empno,ename,sal
         from emp
         order by sal desc
      )
    )
    where rn>5 and rn<=10;
    //查询入职最早的排在第3(不包含)-6位的员工
    select empno,ename,hiredate
    from(
      select empno,ename,hiredate,rownum rn
      from(
       select empno,ename,hiredate
       from emp
       order by hiredate
      )
    )
    where rn>3 and rn<=6;
     
    =======按某字段排序取前n到m之间的记录=========
     1)先写最内部的select,将需要分页显示
        所有记录查询出来,按字段排序。
       (将需要抓取的记录排在前面)
     2)再写中间的select,将rownum列提取出来,
        在提取时给rownum列指定别名
     3)最后写最外层的select,利用rownum别名
       充当where过滤条件.
       例如:rownum别名>n and rownum别名<m
    ==============================
     //查询2080到2083年期间入职的员工信息,
     //显示最近入职的排在3(不包含)-6位的员工信息
    select empno,ename,hiredate
    from(
     select empno,ename,hiredate,rownum rn
     from(
      select empno,ename,hiredate
      from emp
      where to_char(hiredate,'yyyy') >='2080'
        and to_char(hiredate,'yyyy') <='2083'
      order by hiredate desc
     )
    )
    where rn>3 and rn<=6;
  • 相关阅读:
    4.2 [单选]2011年12月30日,国务院办公厅公布的三网融合第二阶段试点城市有()个 - 关于三网融合(主讲:凌捷)笔记
    4.1 [单选]两化融合中的两化是指 - 关于两化融合(主讲:凌捷)笔记
    [单选]物联网产业链的主要产品不包括下列哪一项 - 关于物联网(主讲:柳毅)笔记
    关于云计算(主讲:柳毅)笔记
    [转]iis7.5+win2008 出现 HTTP Error 503. The service is unavailable.
    delphi中Bitmap位图与base64字符串相互转换
    HTTP 错误 404.2
    这3周以来的面试总结(C#/.net 智能硬件/物联网)
    2017.4找工作面试记录-第三周(3)
    2017.4找工作面试记录-第三周(2)--金蝶
  • 原文地址:https://www.cnblogs.com/yunman/p/5497563.html
Copyright © 2020-2023  润新知