본문 바로가기
sqld

Top N 쿼리가 무엇인가요?

by 자격증원톱 2026. 2. 25.
반응형

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 ...
반응형

'sqld' 카테고리의 다른 글

self join과 계층형질의  (0) 2026.02.26
PIVOT에 대해 알아보자  (0) 2026.02.25
윈도우함수가 무엇인가?  (1) 2026.02.25
그룹함수  (0) 2026.02.24
집합연산자  (0) 2026.02.24