我已经看到这个Oracle SQL查询使用rownum和关键字之间的组合。
select *
from
( select rownum rnum, a.*
from (your_query) a
where rownum <= :M )
where rnum >= :N;
以便从“您的查询”中获取行n到m。
我想尝试一下,有人可以告诉我如何从Emp表中获取数据以从4到8条记录中获取记录
select *
from
( select rownum rnum, a.*
from (select * from emp) a
where rownum <= 4 )
where rnum >= 8;
但这不起作用,请有人告诉我原因。
非常感谢你。
答案 0 :(得分:4)
这是因为您将查询限制为&lt; = 4行,因此当您过滤显示记录&gt; = 8时,只能查看4条记录....
反转数字,你应该看到一个结果:
select *
from
( select rownum rnum, a.*
from (select * from emp) a
where rownum <= 8 )
where rnum >= 4;
答案 1 :(得分:2)
如果我不得不猜测,我会说你没有看到你期望的原因(除了让运营商倒退,正如@diagonalbatman所指出的那样)是你没有告诉数据库是什么命令你想要行。你实际上告诉数据库返回任何5行。您甚至不能确定此查询将始终返回相同的五行。每当你得到这样的子集时,你应该在最里面的查询中使用order by
子句,以便在发出rownum
值之前应用排序:
SELECT *
FROM (SELECT ROWNUM rnum, a.*
FROM (SELECT *
FROM emp
ORDER BY emp_id) a
WHERE ROWNUM <= 8)
WHERE rnum >= 4;
答案 2 :(得分:1)
当你在内部语句中查询整个数据时(如果你有大量的数据,不是好主意!)你也可以使用BETWEEN关键字。
SELECT *
FROM
(SELECT rownum AS rnum,
a.*
FROM EMP) a
WHERE rnum BETWEEN 4 AND 8;