• 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 ;
  • 相关阅读:
    Gym 101606 F-Flipping Coins(概率dp)
    Gym101350 J Lazy Physics Cat
    Gym 101350G
    hdu6188 Duizi and Shunzi (贪心或者dp)
    Gym101350 FMonkeying Around
    codeforce 457DIV2 C题
    codeforce 457DIV2 B题
    codeforce 461DIV2 F题
    codeforce 461DIV2 E题
    PE文件RV转FOA及FOA转RVA
  • 原文地址:https://www.cnblogs.com/64Byte/p/12694730.html
Copyright © 2020-2023  润新知