自己分析了下oracle的分页查询

fisherhe 2009-09-25 10:59:18

--getRowNum
SELECT ename,sal ,ROWNUM 行号 FROM emp ;
--问题的产生:行号不是依次排列的
--why?--行号是在ORDER BY之前的查询时就产生的
--相当于9527就是终生代号进了那个门就定下来了,而你查询的时候行号也定了也是这个道理。
SELECT ename,sal ,ROWNUM 行号 FROM emp ORDER BY sal ;
--查询雇员表的前3条记录
SELECT e.* FROM emp e WHERE ROWNUM<=3;
--查询后面的记录呢?而且也不知道最大rownum情况下
SELECT e.* FROM emp e WHERE ROWNUM>3(?)
--!记录为空,很怪。。
--解决:oracle中的rownum有个这样的定律(不知道叫不叫定律,自己定义的规律吧)
--当查询rownum>3的时候那么,由于rownum<3那3条记录不显示,后面的记录就会往上面移,是一个循环的过程。
--所以就导致你查询没得到记录。。
--3层循环可以解决此类问题
SELECT b.* FROM(
SELECT ROWNUM r,a.* FROM
(
SELECT * FROM emp ORDER BY empno DESC
)a
)b
WHERE r>=5 AND r<=10;



...全文
56 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧