"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo limitar y compensar eficientemente los resultados de la consulta Oracle?

¿Cómo limitar y compensar eficientemente los resultados de la consulta Oracle?

Publicado el 2025-04-20
Navegar:492

How to Efficiently Limit and Offset Query Results in Oracle?

Dominar la fila Limitando y compensando las consultas Oracle

Oracle's Rownum Pseudocolumn, con frecuencia para la limitación del conjunto de resultados, presenta un desafío único cuando se combina con el pedido. A diferencia de la cláusula de MySQL Limit , que se aplica después de clasificar, Rownum filtros antes el orden orden por se procesa. Esto significa que simplemente usar Rownum no garantiza un subconjunto ordenado específico de sus resultados.

el enfoque estándar (todas las versiones de Oracle):

para lograr el equivalente de la funcionalidad de MySql Limit , use una consulta anidada:

SELECT *
FROM (
    SELECT *
    FROM emp
    ORDER BY sal DESC
)
WHERE ROWNUM 

Este enfoque primero ordena los datos y luego aplica el filtro Rownum , asegurando que se devuelvan los 5 salarios más altos.

Offseting y limitando los resultados:

para un control más sofisticado, especificar tanto un desplazamiento como un límite requiere una consulta ligeramente más compleja:

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 = :MIN_ROW_TO_FETCH;

reemplazar : max_row_to_fetch y : min_row_to_fetch con los límites superiores e inferiores deseados. Esto obtiene filas dentro de un rango específico después de ordenar.

oracle 12c y más allá: el fetch cláusula:

oracle 12c (y versiones posteriores) ofrece una solución más elegante usando la cláusula fetch :

-- 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;

la cláusula de Fetch proporciona una forma más limpia y legible de limitar y compensar los resultados, lo que lo convierte en el método preferido para Oracle 12c y más tarde. Para versiones anteriores, el enfoque de consulta anidada sigue siendo necesario.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3