标签:order rownum 约束 数据量 页面 数据文件 开始 order by 语句
当一个表中数据量特别大的时候,如果一次性把数据显示给用户,会造成页面过于庞大,体验极差,解决方法就是使用分页查询。
使用分页查询首先要会使用rownum关键字,Oracle对外提供的自动给查询结果编号的关键字,与每行数据没有关系。
注:rownum只能做 < 、<= 的判断,不能进行 > 、 >= 的判断。
原因:rownum被称为伪列,是Oracle数据库从数据文件或缓冲区中读取数据的顺序,第一条记录为1,第二条为2,以此类推。当使用 > 、 >= 时,从缓冲区或数据文件中得到的第一条记录的rownum为1,不符合sql语句的条件会被删除,接着取下一条,但是下一条的rownum还会是1,又被删除,以此类推,便没有数据了。
总结:rownum总是从1开始。
解决方法:嵌套一个子查询,将rownum伪列变成一个真实的列。
SELECT * FROM emp;
SELECT emp.*,ROWNUM FROM emp;
SELECT * FROM (SELECT emp.*,ROWNUM rn FROM emp);
-- n代表页数,m代表一页有几条数据
SELECT * FROM
(SELECT emp.*,ROWNUM rn FROM emp)
WHERE rn>(&n-1)*&m AND rn<=&n*&m;
例:n=1,m=5
SELECT * FROM
(SELECT a.*,ROWNUM rn FROM
(SELECT * FROM emp ORDER BY sal) a)
WHERE rn>(&n-1)*&m AND rn<=&n*&m;
标签:order rownum 约束 数据量 页面 数据文件 开始 order by 语句
原文地址:https://www.cnblogs.com/zbh355376/p/14317939.html