Top N 쿼리가 무엇인가요?
f
firststep 에디터
IT / 자격증 전문 라이터
2026년 2월 25일909
Top N 쿼리가 무엇인가요?
1) ROWNUM(오라클) — “가상 번호(슈도 컬럼)”
(1) 슈도 컬럼이란?
- 테이블에 실제로 저장된 컬럼이 아니라, DB가 실행 과정에서 임시로 만들어 주는 값입니다.
- 오라클 대표 슈도 컬럼: ROWNUM, ROWID, LEVEL, CURRVAL/NEXTVAL(시퀀스)
(2) ROWNUM 특징
- 결과가 만들어질 때 행에 1,2,3… 번호가 붙습니다.
- 그래서 “상위 몇 행”을 자를 때 쓰기 좋습니다.
(3) ROWNUM으로 Top N 하는 기본 패턴(중요)
정렬이 먼저, ROWNUM은 그 다음이어야 합니다.
그래서 보통 “정렬을 서브쿼리로 감싼 뒤” ROWNUM을 붙입니다.
예: 급여(SAL) 높은 순으로 상위 5명
SELECT ROWNUM, empno, ename, sal
FROM (
SELECT empno, ename, sal
FROM emp
ORDER BY sal DESC
)
WHERE ROWNUM <= 5;
왜 이렇게 하냐?
- ROWNUM은 “정렬 결과”에 붙어야 Top N이 정확합니다.
- 정렬 없이 ROWNUM <= 5를 먼저 걸면 “그냥 먼저 잡힌 5개”가 나올 수 있습니다.
2) TOP 절(SQL Server) — “TOP(N)으로 바로 자르기”
SQL Server는 TOP을 SELECT에 직접 씁니다.
예: 20번 부서에서 급여 높은 순 상위 3명
SELECT TOP (3) empno, ename, sal
FROM emp
WHERE deptno = 20
ORDER BY sal DESC;
포인트:
- ORDER BY가 사실상 필수입니다. (정렬 기준이 없으면 “무슨 상위인지”가 불명확)
3) ROW LIMITING(오라클 12c+ 표준 방식) — FETCH FIRST / OFFSET
오라클도 요즘은 표준 문법에 맞춘 FETCH / OFFSET을 씁니다.
(1) 상위 N개
예: 급여 높은 순 상위 5명
SELECT empno, ename, sal
FROM emp
ORDER BY sal DESC
FETCH FIRST 5 ROWS ONLY;
(2) “상위 5개 건너뛰고 다음 5개”(페이지 처리)
예: 급여 높은 순으로 6~10등(= 첫 5개 스킵 후 다음 5개)
SELECT empno, ename, sal
FROM emp
ORDER BY sal DESC
OFFSET 5 ROWS FETCH NEXT 5 ROWS ONLY;
이게 딱 “페이지네이션”입니다.
- 1페이지(1~5): FETCH FIRST 5
- 2페이지(6~10): OFFSET 5 FETCH NEXT 5
- 3페이지(11~15): OFFSET 10 FETCH NEXT 5
한 줄 요약
- Oracle 구버전: 정렬을 서브쿼리로 하고 바깥에서 ROWNUM <= N
- SQL Server: SELECT TOP (N) ... ORDER BY ...
- Oracle 12c+ / 표준: ORDER BY ... FETCH FIRST N 또는 OFFSET ... FETCH NEXT ...
f
firststep 에디터 · IT / 자격증 전문 라이터
firststep.kr의 실무 에디터로서 무언가를 처음 도전하는 분들이 헤매지 않도록 검증된 지식과 실습 가이드를 작성합니다.
댓글 0개
댓글을 작성하려면 로그인이 필요합니다
간단한 이메일과 비밀번호로 3초 만에 가입하고 의견을 남겨보세요.
첫 번째 댓글을 남겨보세요!