«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как эффективно ограничить и компенсировать результаты Oracle запроса?

Как эффективно ограничить и компенсировать результаты Oracle запроса?

Опубликовано в 2025-04-20
Просматривать:986

How to Efficiently Limit and Offset Query Results in Oracle?

Mastering строки ограничивает и компенсируется в Oracle Queries

]

oracle's rownum pseudocolumn, часто используемый для ограничения набора результатов, представляет уникальную проблему в сочетании с упорядочением. В отличие от Mysql's Limit Clause, который применяется после сортировки, rownum filters до user order by . Это означает просто использование rownum не гарантирует конкретную упорядоченную подмножество ваших результатов. ]

стандартный подход (All Oracle версии): ]

Чтобы достичь эквивалента функциональности MySQL

Limit , используйте вложенный запрос: ]

SELECT *
FROM (
    SELECT *
    FROM emp
    ORDER BY sal DESC
)
WHERE ROWNUM 
Этот подход сначала заказывает данные, а затем применяет фильтр

rownum , обеспечивая возврату 5 лучших зарплат. ]

Смешание и ограничивающие результаты: ]

для более сложного управления, указание как смещения, так и предела требует немного более сложного запроса:

]

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;
заменить

: max_row_to_fetch и : min_row_to_fetch с вашими нужными верхними и нижними границами. Это вызывает ряды в определенном диапазоне после заказа.

oracle 12c и кроме: fetch clause: ]

oracle 12c (и более поздние версии) предлагает более элегантное решение, используя

elech clause: ]

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

eleatch представляет собой более чистый и более читаемый способ ограничения и сфона, что делает его предпочтительным методом для Oracle 12c и позже. Для старых версий вложенный подход запроса остается необходимым. ]

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3