How do I limit the number of rows returned by an Oracle query after ordering?

前端 未结 17 1483
夕颜
夕颜 2020-11-21 04:56

Is there a way to make an Oracle query behave like it contains a MySQL limit clause?

In MySQL, I can do this:

         


        
17条回答
  •  小鲜肉
    小鲜肉 (楼主)
    2020-11-21 05:04

    You can use a subquery for this like

    select *
    from  
    ( select * 
      from emp 
      order by sal desc ) 
    where ROWNUM <= 5;
    

    Have also a look at the topic On ROWNUM and limiting results at Oracle/AskTom for more information.

    Update: To limit the result with both lower and upper bounds things get a bit more bloated with

    select * from 
    ( select a.*, ROWNUM rnum from 
      (  ) a 
      where ROWNUM <= :MAX_ROW_TO_FETCH )
    where rnum  >= :MIN_ROW_TO_FETCH;
    

    (Copied from specified AskTom-article)

    Update 2: Starting with Oracle 12c (12.1) there is a syntax available to limit rows or start at offsets.

    SELECT * 
    FROM   sometable
    ORDER BY name
    OFFSET 20 ROWS FETCH NEXT 10 ROWS ONLY;
    

    See this answer for more examples. Thanks to Krumia for the hint.

提交回复
热议问题