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