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

    分页查询

    不同数据库的sql 不一样 方言
      数据量很大, 如果一次性显示, 用户的体验度差,
      原因: 数据量越大, 查询的耗时越多, 用户等待时间越多

    把数据分批查询, 分页
      一页显示的多少行数据: 页容量: pageSize 固定 数字
      查询第几页: 当前页: 数字 : pageIndex

    Oracle: 关键值: rownum  行号, 动态产生, 查询结果集动态产生

      rownum 从1开始, 每查询到一条, 加1, 有1才有2
      rownum 只能小于某个值, 不能等于,大于某个值

     查询第一页的数据: 前3条数据

    --可以
    select *  from emp where rownum < 3;

    查询第二页数据:   4,--> 6

    -- 查到到第一条数据:  1   1>=4 false,不满足
    -- 查询到第二条数据   1
    -- 不可以
    select * from emp where  rownum >=4 and rownum <= 6;

    查询第三条数据

    -- 查询不到数据
    -- 一直返回的是第一条数据
    select *  from emp where rownum = 3;

    解决办法:

      想办法把rownum值固定
      外层select --> 产生自己的rownum
      内层select --> 产生自己的rownum

    --效率低:  子查询已经把表的所有数据查询出来了
    select rownum,t.* from (select rownum rn, e.* from emp e) t
    where t.rn >=4 and t.rn <=6;
    --改进版: 提交效率
    select rownum,t.* from (select rownum rn, e.* from emp e where rownum <=6 ) t
    where t.rn >=4 ;

    正确写法

      需要,把 sql的比较数字使用pageSize与pageIndex 替换
        小数(大于等于符号后面的数字) = (pageIndex-1)*pageSize+1
        大数(小于等于符号后面的数字) = pageIndex * pageSize

    -- 第一页,每页三条数据
    select rownum,t.* from (select rownum rn, e.* from emp e where rownum < = 1*3 ) t 
    where t.rn >= (1-1)*3+1 ;

    添加排序

    正确顺序: 先排序, 在筛选指定页的数据

    --根据sal降序排序,  查询第二页的数据,  pageSize = 3
    --   select rownum rn, e.* from emp e where rownum <=6  order by sal desc 
    -- 先 from --> where  --> order by 
    --   1) select rownum rn, e.* from emp e where rownum <=6  得到前6条数据
    --   2)  order by sal desc ;  对前面查询到的前6条数据进行排序
    
    -- 嵌套两层子查询
    select * from (
      select rownum rn, t1.* from 
           (select * from emp order by sal desc )t1
      where rownum <=6  
     ) t2
    where t2.rn >=4 ;
  • 相关阅读:
    P1121 环状最大两段子段和
    无题
    cdoj 1485 柱爷搞子串 sam treap
    自然数幂和
    Gym 100341C AVL Trees NTT
    线性筛分解质因子
    codeforces 366 Ant Man dp
    UVALive 6914 Maze Mayhem 轮廓线dp
    hdu 5790 Prefix 字典树 主席树
    莫比乌斯反演个人小结
  • 原文地址:https://www.cnblogs.com/64Byte/p/12694730.html
Copyright © 2011-2022 走看看