oracle rownum的问题

在oracle 的scott用户表下查询全表 使用rownum 代码如下: select rownum ,empno ,ename,job,mgr,hiredate from emp where rownum >2为什么一条都数据都没有啊 谢谢!

你这样肯定有问题,
rownum是对结果集的编序排列,始终是从1开始,所以你的rownum>2永远为假,所以就没记录返回。。。

rownum只能用于<,如果要用>要么用rownumber()OVER,要么就实例化

用ROW_NUMBER() OVER()解决

SELECT empno, ename, job, mgr, hiredate
FROM (SELECT empno, ename, job, mgr, hiredate,
ROW_NUMBER() OVER(ORDER BY empno) rk
FROM emp) t
WHERE rk > 2

或者实例化就可以了
SELECT empno, ename, job, mgr, hiredate
FROM (SELECT empno, ename, job, mgr, hiredate,
rownum rk
FROM emp) t
WHERE rk > 2
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-10-06
因为 第一条 记录的 rownum = 1

你要 rownum >2 那第一条就没法出来, 就结束了。

SELECT *
FROM
(select rownum AS no,empno ,ename,job,mgr,hiredate from emp)
WHERE
no > 2

这样是可行的。 首先把 1,2,3,4,5,6......都读取出来

然后要求 > 2
第2个回答  2010-10-06
如果你要是用 rownum查询只能使用
SQL> select rownum ,empno ,ename,job,mgr,hiredate from emp where rownum < 5; 查询前四条的记录!

ROWNUM EMPNO ENAME JOB MGR HIREDATE
---------- ---------- ---------- --------- ---------- ------------------
1 7369 SMITH CLERK 7902 17-DEC-80
2 7499 ALLEN SALESMAN 7698 20-FEB-81
3 7521 WARD SALESMAN 7698 22-FEB-81
4 7566 JONES MANAGER 7839 02-APR-81

SQL>
第3个回答  2019-09-13
rownum 是伪列
相似回答