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 vuser协议(2)---LoadRunner篇
    【转】性能测试分享---java协议(1)------jemter篇
    windows下怎么修改mysql密码
    linux下怎么修改mysql的字符集编码默认分类
    java使用Redis2--保存对象
    java使用Redis1--安装与简单使用
    java实现hash一致性算法
    Redis Sentinel初体验
    Redis持久化实践及灾难恢复模拟
    Redis学习笔记
  • 原文地址:https://www.cnblogs.com/yunman/p/5497563.html
Copyright © 2011-2022 走看看