使用rownum与关键字之间的组合

时间:2011-09-06 09:46:49

标签: oracle

我已经看到这个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;

但这不起作用,请有人告诉我原因。

非常感谢你。

3 个答案:

答案 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;