从oracle获得有限的结果

时间:2014-06-19 16:54:00

标签: sql oracle rownum

我有一套4000条记录,我只能检索300条记录。

我正在对结果集进行分页,但由于我们将结果限制为300,因此每次数据库命中都会得到不同的结果。

所以有没有选项可以获得4000条记录的前300条记录,而不会获得4000条记录的全部结果。

以下是查询:

从表中选择id,其中name ='ronaldo'和rownum< = 300 order by id asc;

1 个答案:

答案 0 :(得分:1)

问题是按以下顺序处理查询:

  1. FROM / WHERE子句首先出现。
  2. ROWNUM被分配并递增到FROM / WHERE子句的每个输出行。
  3. 应用SELECT。
  4. 应用GROUP BY。
  5. 已应用HAVING。
  6. 已应用ORDER BY。
  7. 因此,您所写的查询将随机返回300条记录。

    您需要执行嵌套查询,如下所示:

    select * from
      (select * from table
       where name='ronaldo' order by id asc) 
    where ROWNUM <= 300;
    

    此外,如果您使用的是Oracle 12c或更高版本,则可以使用完全非标准的 FETCH FIRST语法:

    SELECT *
      FROM table
      WHERE name='ronaldo'
      ORDER BY id asc
      FETCH FIRST 300 ROWS ONLY;
    

    为什么他们不支持LIMIT关键字?因为他们是甲骨文。