반응형

ROWNUM PSEUDO 컬럼
ORACLE의 ROWNUM은 칼럼과 비슷한 성격의 PSEUDO COLUMN입니다. SQL 처리 결과 집합의 각 행에 대해 임시로 부여되는 일련번호입니다. 테이블이나 집합에서 원하는 만큼 행을 가져오고 싶을 때 WHERE 절에서 행의 개수를 제한하는 목적으로 사용합니다.
SELECT PLAYER_NAME FROM PLAYER WHERE ROWNUM <= N
ORACLE에서 순위가 높은 N개의 로우를 추출하기 위해 ORDER BY 절과 WHERE 절의 ROWNUM 조건을 같이 사용하는 경우가 있습니다. 하지만 이 두 조건으로는 원하는 결과를 얻을 수 없습니다. ORACLE의 경우, 정렬이 완료된 후 데이터의 일부가 출력되는 것이 아닌 데이터 일부를 먼저 추출한 후 정렬작업이 일어나기 때문입니다.
사원 테이블에서 급여가 높은 3명을 내림차순으로 출력하려고 합니다. 아래 쿼리는 급여 순서 상관없이 무작위로 추출된 3명에 한해 급여를 내림차순으로 정렬한 결과입니다.
SELECT EMPLOYEE_ID , SARARY
FROM HR.EMPLOYEES
WHERE ROWNUM < 4
ORDER BY SAL DESC;
정렬 후 원하는 데이터를 얻기 위해서는 인라인 뷰에서 먼저 데이터를 정렬한 후 메인 퀴리에서 ROWNUM 조건을 사용해야합니다.
SELECT EMPLOYEE_ID , SALARY
FROM (
SELECT EMPLOYEE_ID , SALARY
FROM HR.EMPLOYEES
ORDER BY SALARY DESC
)
WHERE ROWNUM < 4
ROW LIMITING 절
ORACLE 12.1 버전 부터 ROW LIMITING 절이 추가돼 TOP N 쿼리를 작성할 수 있습니다.
- OFFSET N ROWS : 건너뛸 행 N개를 지정합니다.
- FETCH FIRST | NEXT ROWCOUNT/PERCENT : 반환할 행의 개수나 백분율을 지정합니다. FIRST와 NEXT는 동일기능을 합니다.
- ONLY : 지정된 행의 개수나 백분율만큼 행을 반환합니다.
- WITH TIES : 마지막 행과 값이 일치하는 다음 행들도 포함해서 반환합니다.
[OFFSET N {ROW|ROWS}]
[FETCH {FIRST|NEXT}[{rowcount | percent PERCENT}]{ROW|ROWS}{ONLY | WITH TIES}]
아래는 ROW LIMITING 절을 사용한 TOP 쿼리입니다.
-- 10개의 레코드를 뛰어넘고 5개만 출력합니다.
SELECT EMPLOYEE_ID, SALARY
FROM HR.EMPLOYEES
ORDER BY SALARY , EMPLOYEE_ID
OFFER 10 ROWS FETCH FIRST 5 ROWS ONLY;
-- OFFSET 만 기술하면 건너뛴 행 이후의 전체 행이 반환됩니다.
SELECT EMPLOYEE_ID, SALARY
FROM HR.EMPLOYEES
ORDER BY SALARY , EMPLOYEE_ID
OFFSET 5 ROWS;반응형
'DB > SQL 활용' 카테고리의 다른 글
| SQL활용 - PIVOT 절과 UNPIVOT절 사용법 핵심 정리 (0) | 2023.06.16 |
|---|---|
| SQL활용 - 계층형 질의와 셀프 조인 활용법 (1) | 2023.06.16 |
| SQL활용 - 윈도우 함수 활용(WINDOW FUNCTION SYSTAX, WINDOWING, 오라클 RANK, DENSE RANK, ROW_NUMBER, FIRST VALUE, LAST VALUE, LAG) (0) | 2023.06.16 |
| SQL활용 - 그룹 함수를 활용한 데이터 집계방법(ROLLUP, CUBE ,GRUOPING SET) (0) | 2023.06.16 |
| SQL활용 - 다수의 결과집합을 결합하는 집합연산자(UNION, UNION ALL, INTERSECT, MINUS) (0) | 2023.06.16 |