Oracle数据库中排序后限制结果行数
许多数据库用户依赖MySQL的LIMIT子句在排序后检索特定范围的行。然而,Oracle本身并不支持类似的功能。Oracle使用ROWNUM伪列,它在ORDER BY之前进行计算。当尝试根据排序限制行数时,这种行为可能会导致意外结果。
为了在Oracle中实现类似MySQL的限制功能,一种解决方案是使用子查询。请考虑以下示例:
<code class="language-sql">SELECT * FROM ( SELECT * FROM emp ORDER BY sal DESC ) WHERE ROWNUM <= 5;</code>
此查询将按sal列降序检索前5行。
为了提高灵活性,您可以使用以下方法:
<code class="language-sql">SELECT * FROM ( SELECT *, ROWNUM AS rnum FROM ( SELECT * FROM emp ORDER BY sal DESC ) AS a ) WHERE rnum >= :MIN_ROW_TO_FETCH AND rnum <= :MAX_ROW_TO_FETCH;</code>
此子查询允许您指定检索行的下限和上限。
此外,Oracle 12c (12.1) 引入了一种新的语法:
<code class="language-sql">-- 获取前10个结果 SELECT * FROM sometable ORDER BY name FETCH FIRST 10 ROWS ONLY; -- 获取第20-30个结果行 SELECT * FROM sometable ORDER BY name OFFSET 20 ROWS FETCH NEXT 10 ROWS ONLY;</code>
此语法提供了一种更简洁的方法来根据排序限制结果行数。
以上是订购后如何限制行导致Oracle查询?的详细内容。更多信息请关注PHP中文网其他相关文章!