"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > Oracle 쿼리 결과를 효율적으로 제한하고 상쇄하는 방법은 무엇입니까?

Oracle 쿼리 결과를 효율적으로 제한하고 상쇄하는 방법은 무엇입니까?

2025-04-20에 게시되었습니다
검색:195

How to Efficiently Limit and Offset Query Results in Oracle?

Oracle Queries의 마스터링 행 제한 및 오프셋

Oracle의 rownum pseudocolumn은 결과 설정 제한에 자주 사용되며 주문과 결합 할 때 고유 한 도전을 제시합니다. MySQL의 Limit 절과 달리, rownum 필터 필터 주문에 의해 clause가 처리됩니다. 이것은 단순히 rownum 을 사용하는 것을 의미합니다.

표준 접근법 (모든 Oracle 버전) :

MySQL의 한계 기능에 해당하는 것을 달성하려면 중첩 쿼리를 사용하십시오 :

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 절 :

Oracle 12C (및 이후 버전)는 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;

fetch clause는 결과를 제한하고 오프셋하는 더 깨끗하고 읽기 쉬운 방법을 제공하여 Oracle 12C 이상에 선호되는 방법입니다. 이전 버전의 경우 중첩 쿼리 접근 방식이 여전히 필요합니다.

최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3