限制结果集中的Oracle查询
>oracle的ROWNUM
pseudoColumn与MySQL的LIMIT
子句不同; 在处理ROWNUM
>之前,分配了>>。 因此,在订购后直接使用ORDER BY
不会限制行ROWNUM
。为了实现这一目标,请使用一个子查询:
<code class="language-sql">SELECT * FROM (SELECT * FROM emp ORDER BY sal DESC) WHERE ROWNUM <= n;</code>)降序订购
>表,然后外部查询使用emp
>将输出限制为top sal
对于需要上限和下边界的更复杂的场景,需要一个嵌套的子查询:ROWNUM
n
<code class="language-sql">SELECT * FROM (SELECT a.*, ROWNUM rnum FROM (SELECT * FROM your_table ORDER BY your_column) a WHERE ROWNUM <= :MAX_ROW_TO_FETCH) WHERE rnum >= :MIN_ROW_TO_FETCH;</code>
Oracle 12c(以及后来的版本)使用>和
提供更简化的语法:
FETCH FIRST
OFFSET
这将结果设置直接限制为按
<code class="language-sql">SELECT * FROM sometable ORDER BY name FETCH FIRST 10 ROWS ONLY;</code>>子句:
>
name
OFFSET
请参阅官方的Oracle文档以获取全面的示例和绩效优化策略。
以上是订购后如何限制Oracle查询中的行?的详细内容。更多信息请关注PHP中文网其他相关文章!