"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como limitar e compensar com eficiência os resultados da consulta Oracle?

Como limitar e compensar com eficiência os resultados da consulta Oracle?

Postado em 2025-04-20
Navegar:199

How to Efficiently Limit and Offset Query Results in Oracle?

domina a limitação e compensação nas consultas do Oracle

ROWNUM pseudocolumn, freqüentemente usado para limitação do conjunto de resultados, apresenta um desafio único quando combinado com o pedido. Ao contrário da cláusula MySQL's limite , que se aplica após a classificação, ROWNUM filtros antes A cláusula da cláusula é processada. Isso significa simplesmente usar ROWNUM não garante um subconjunto ordenado específico dos seus resultados.

a abordagem padrão (todas as versões do Oracle):

para alcançar o equivalente da funcionalidade do MySQL's limite , use uma consulta aninhada:

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

esta abordagem primeiro ordena os dados e depois aplica o filtro rownum , garantindo que os 5 salários mais altos sejam retornados.

Offsetting e Limiting Results:

para controle mais sofisticado, especificando um deslocamento e limite requer uma consulta um pouco mais complexa:

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;

substituir : max_row_to_fetch e : min_row_to_fetch com os limites superiores e inferiores desejados. Isso busca linhas dentro de um intervalo específico após o pedido.

oracle 12c e além: a cláusula fetch :

Oracle 12c (e versões posteriores) oferece uma solução mais elegante usando o fetch cláusula:

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

A cláusula FETCH fornece uma maneira mais limpa e legível de limitar e compensar os resultados, tornando -o o método preferido para o Oracle 12C e posterior. Para versões mais antigas, a abordagem de consulta aninhada permanece necessária.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3