• Oracle分页查询


    当一个表中数据量特别大的时候,如果一次性把数据显示给用户,会造成页面过于庞大,体验极差,解决方法就是使用分页查询。

    使用分页查询首先要会使用rownum关键字,Oracle对外提供的自动给查询结果编号的关键字,与每行数据没有关系。

    注:rownum只能做 < 、<= 的判断,不能进行 > 、 >= 的判断。

    原因:rownum被称为伪列,是Oracle数据库从数据文件或缓冲区中读取数据的顺序,第一条记录为1,第二条为2,以此类推。当使用 > 、 >= 时,从缓冲区或数据文件中得到的第一条记录的rownum为1,不符合sql语句的条件会被删除,接着取下一条,但是下一条的rownum还会是1,又被删除,以此类推,便没有数据了。

    总结:rownum总是从1开始。

    解决方法:嵌套一个子查询,将rownum伪列变成一个真实的列。

    1. 普通查询:

    SELECT * FROM emp; 
    

    2. 加上rownum列的查询:

    SELECT emp.*,ROWNUM FROM emp; 
    

    3. 查询带有rownum列的表(此时的rownum列作为固定列,是不变的)

    SELECT * FROM (SELECT emp.*,ROWNUM rn FROM emp); 
    

    4. 加分页条件(因为此时rn列固定不变,所以可以对rn列增加约束)

    -- n代表页数,m代表一页有几条数据
    
    SELECT * FROM 
          (SELECT emp.*,ROWNUM rn FROM emp) 
    WHERE rn>(&n-1)*&m AND rn<=&n*&m;
    

    例:n=1,m=5

    5. 排序加分页(因为加上rownum列后在排序会使rownum列顺序错乱,所以先进行排序,然后加上rownum列,最后在加分页条件,三层嵌套子查询)

    SELECT * FROM 
          (SELECT a.*,ROWNUM rn FROM
                 (SELECT * FROM emp ORDER BY sal) a)
    WHERE rn>(&n-1)*&m AND rn<=&n*&m;
    

  • 相关阅读:
    Oracle第三方ado.net数据提供程序
    HTML5实战 文摘 第二章 HTML5用于创建表单的输入小部件 数据绑定以及数据验证
    reactjs & antd & redux 使用心得
    HTML5实战 文摘 第一章 从文档到应用的转变
    css的高级选择器
    <!DOCTYPE html> 是什么,它的作用是什么
    Nginx调优
    java enum 枚举简单用法
    简谈java解析HTML(org.jsoup.nodes.Document)
    jquery EasyUI tree 加载远程数据 java实现
  • 原文地址:https://www.cnblogs.com/zbh355376/p/14317939.html
Copyright © 2020-2023  润新知