oracle的ROWNUM
LIMIT
pseududocolumn,在与订购结合使用时会提出一个独特的挑战。与MySQL的ROWNUM
子句不同,该子句在排序之后适用,过滤> ORDER BY
ROWNUM
>
不能保证您的结果的特定有序子集。>
标准方法(所有Oracle版本):>
LIMIT
要获得相当于mySQL的
<code class="language-sql">SELECT * FROM ( SELECT * FROM emp ORDER BY sal DESC ) WHERE ROWNUM <= 5;</code>
ROWNUM
此方法首先订购数据,然后应用
偏移和限制结果:
>
对于更复杂的控制,指定偏移和限制需要一个更复杂的查询:<code class="language-sql">SELECT * FROM ( SELECT a.*, ROWNUM rnum FROM ( SELECT * -- Your main query with ORDER BY clause FROM some_table ORDER BY some_column ) a WHERE ROWNUM <= :MAX_ROW_TO_FETCH ) WHERE rnum >= :MIN_ROW_TO_FETCH;</code>
:MAX_ROW_TO_FETCH
>用所需的上限和下限替换:MIN_ROW_TO_FETCH
>
FETCH
Oracle 12c及以后:
FETCH
>
<code class="language-sql">-- Retrieve the first 10 rows SELECT * FROM sometable ORDER BY name FETCH FIRST 10 ROWS ONLY; -- Retrieve rows 20-30 SELECT * FROM sometable ORDER BY name OFFSET 20 ROWS FETCH NEXT 10 ROWS ONLY;</code>
子句提供了更优雅的解决方案:FETCH
以上是Oracle中如何高效限制和偏移查询结果?的详细内容。更多信息请关注PHP中文网其他相关文章!