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