zoukankan      html  css  js  c++  java
  • 分页查询

    *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;
  • 相关阅读:
    java——io、字节流缓冲区拷贝文件、字节缓冲流
    java——斗地主小游戏之洗牌发牌
    java——HashMap、Hashtable
    java——模拟新浪微博用户注册
    [bzoj 1492][NOI2007]货币兑换Cash
    [bzoj 1010][HNOI 2008]玩具装箱
    [bzoj 2875][noi2012]随机数生成器
    [bzoj 4872][六省联考2017]分手是祝愿
    [bzoj 3566][SHOI 2014]概率充电器
    [bzoj 3534][Sdoi2014] 重建
  • 原文地址:https://www.cnblogs.com/yunman/p/5497563.html
Copyright © 2011-2022 走看看