Top N 쿼리 는 "상위 N건"을 뽑는 쿼리입니다(급여 상위 3명 등). 시험은 오라클 ROWNUM 이 정렬보다 먼저 매겨진다 는 함정을 결과 예측으로 자주 냅니다.
이 단원, 시험에서 어디에 나오나
- 제2과목 「SQL 기본 및 활용」 단원입니다.
- ROWNUM 함정(정렬 순서 문제)과 상위 N건 뽑는 방법이 출제 포인트입니다.
① ROWNUM 함정 — 정렬보다 먼저 매겨진다
그림 1. ROWNUM은 WHERE 단계(정렬 전)에 매겨집니다. 정렬을 서브쿼리로 먼저 끝낸 뒤 ROWNUM을 걸어야 상위 N건입니다. (자작 도식)
ROWNUM은 결과 행에 읽히는 순서대로 번호를 매깁니다 —ORDER BY보다 먼저.- 그래서
WHERE ROWNUM <= 3 ... ORDER BY 급여 DESC는 아무 3건을 뽑은 뒤 정렬 → 상위 3명이 아닙니다. - 정렬을 인라인뷰로 먼저 한 뒤 바깥에서 ROWNUM을 걸어야 합니다.
SELECT * FROM (SELECT * FROM 사원 ORDER BY 급여 DESC)
WHERE ROWNUM <= 3; -- 급여 상위 3명
② ROWNUM의 또 다른 함정
ROWNUM = N(N>1) 은 결과가 없습니다. (첫 행이 1이어야 하는데 건너뛸 수 없음)ROWNUM > 1도 결과가 없습니다. → "N번째부터"가 필요하면 인라인뷰로 ROWNUM을 별칭 컬럼으로 만든 뒤 조건을 겁니다.
③ 상위 N건 뽑는 3가지 방법
그림 2. ROWNUM(오라클)·ROW_NUMBER() OVER·FETCH FIRST N ROWS ONLY(표준). (자작 도식)
| 방법 | 특징 |
|---|---|
| ROWNUM | 오라클. 정렬 인라인뷰 후 사용 |
| ROW_NUMBER() OVER | 순위로 필터. 그룹별 Top-N 도 가능 |
| FETCH FIRST N ROWS ONLY | 표준 SQL(간결) |
자주 틀리는 함정
- ROWNUM 먼저, ORDER BY 나중 → 상위 N이 아님(정렬을 먼저).
ROWNUM = 3→ 결과 없음.- 그룹별 Top-N 은 ROWNUM으로 어렵고
ROW_NUMBER() OVER(PARTITION BY …)가 적합.
한 장 정리 (암기 카드)
- ROWNUM은 정렬보다 먼저 → 정렬을 인라인뷰로 먼저 하고 바깥에서
ROWNUM <= N. ROWNUM = N(N>1)·ROWNUM > 1→ 결과 없음.- 방법 3종: ROWNUM · ROW_NUMBER() OVER · FETCH FIRST N ROWS ONLY.
- 그룹별 Top-N →
ROW_NUMBER() OVER(PARTITION BY …).
참고 출처
- 시험 과목·출제기준: 한국데이터산업진흥원(KDATA) 데이터자격검정 (2026년 7월 확인)
- ROWNUM·ROW_NUMBER·FETCH 동작은 오라클·ANSI SQL 표준에 근거하며, 본문 설명·예시·도식은 자작입니다.