如何限制ORACLE查询返回的记录数?

时间:2010-12-21 16:30:29

标签: oracle limit

如何限制ORACLE查询返回的记录数?

你认为哪种方式最好?

5 个答案:

答案 0 :(得分:6)

在查询结尾添加“rownum< =#of entries”。

答案 1 :(得分:3)

自Oracle 12c起,您还可以使用fetch first row only

第一行:

select * from example fetch first row only;

前10行:

select * from example fetch first 10 rows only;

答案 2 :(得分:2)

然而,这有一个缺点。如果要按降序或升序列出记录,可能只会遗漏一些记录。假设您将返回限制为8行,然后查询将前8次出现并按排序顺序列出。

以下查询将获取表中符合条件的第8条记录,并按您的顺序对其进行排序。例如

select 
    order, order_date, booked_out_date 
from 
    orderdb
where 
    booked_out_date is not null 
    and rownum <= 8 
order by 
    booked_out_date;

下一个查询将首先获取符合我标准的所有记录,对其进行排序,然后它将显示按日期顺序预订的前八个订单。

Select * 
From
    (Select 
         order, order_date, booked_out_date 
     From 
         orderdb
     Where 
          booked_out_date is not null 
     Order By date)
Where 
    rownum <= 8;

如果预订的订单属于前八个订单,但他们在表中的记录是ie。第20条记录,你可能会在第一次查询时错过它,但第二条记录会把它拿起来。

答案 3 :(得分:1)

首先,你是分页,因此需要有限的行(这是一个有效的结果限制器)?相反,问问自己,你的查询对于手头的任务是否过于深远。

如前所述,您可以使用rownum来限制结果集,或者将rownum包装为如下所示的分页示例:

Alternatives to LIMIT and OFFSET for paging in Oracle

答案 4 :(得分:0)

这对我有用。你也可以实现这个分页。

SELECT
    *
FROM
    (
        SELECT
            inner_query.*,
            ROWNUM rnum
        FROM
            (
                SELECT
                    *
                FROM
                    table_name
                ORDER BY column_name
            ) inner_query
        WHERE
            ROWNUM <= 20
    )
WHERE
    rnum >= 1;

其中 rownum 为否。记录和 rnum 是起始位置。