SQL Top N 쿼리: 오라클과 SQL Server에서의 활용법
데이터베이스에서 Top N 쿼리는 특정 테이블에서 상위 N개의 데이터를 조회하는 데 사용됩니다.
예를 들어, 매출이 가장 높은 상위 5개의 상품을 찾거나, 급여가 가장 높은 직원 3명을 조회할 때 유용합니다.
하지만 오라클(Oracle)과 SQL Server에서 Top N 쿼리를 구현하는 방식이 다릅니다.
이번 글에서는 Top N 쿼리 개념, 오라클과 SQL Server에서의 사용법, 쿼리 실행 과정을 샘플 테이블과 함께 알아보겠습니다.
1. 샘플 테이블: Employees (직원 테이블)
다음과 같은 Employees 테이블이 있다고 가정합니다.
EmployeeID | EmployeeName | Department | Salary |
1 | Alice | Sales | 7000 |
2 | Bob | IT | 6500 |
3 | Jane | Marketing | 6000 |
4 | John | Sales | 5000 |
5 | Tom | HR | 4500 |
목표
- 급여(Salary)가 높은 상위 3명의 직원을 조회
- ORDER BY Salary DESC로 정렬하여 상위 N개를 찾음
2. 오라클(Oracle)에서 Top N 쿼리
오라클에서는 FETCH FIRST N ROWS ONLY 또는 ROWNUM을 사용하여 Top N 데이터를 조회할 수 있습니다.
🔹 방법 1: FETCH FIRST N ROWS ONLY (Oracle 12c 이상 지원)
SELECT EmployeeName, Salary
FROM Employees
ORDER BY Salary DESC
FETCH FIRST 3 ROWS ONLY;
쿼리 실행 순서
1️⃣ FROM Employees → 모든 직원 데이터를 조회
2️⃣ ORDER BY Salary DESC → 급여가 높은 순으로 정렬
3️⃣ FETCH FIRST 3 ROWS ONLY → 정렬된 데이터에서 상위 3개 행만 반환
출력 결과
EmployeeName | Salary |
Alice | 7000 |
Bob | 6500 |
Jane | 6000 |
✅ FETCH 절은 최신 오라클 버전(12c 이상)에서만 사용 가능하며, 가독성이 좋음
🔹 방법 2: ROWNUM 사용 (오라클 전 버전 지원)
SELECT EmployeeName, Salary
FROM (
SELECT EmployeeName, Salary
FROM Employees
ORDER BY Salary DESC
)
WHERE ROWNUM <= 3;
쿼리 실행 순서
1️⃣ 서브쿼리 실행 → Employees 테이블에서 Salary DESC로 정렬
2️⃣ ROWNUM <= 3 → 정렬된 데이터에서 상위 3개의 행만 선택
출력 결과 (동일)
EmployeeName | Salary |
Alice | 7000 |
Bob | 6500 |
Jane | 6000 |
✅ ROWNUM은 오라클의 오래된 방식이며, 서브쿼리 없이 사용할 경우 정확한 결과가 나오지 않을 수 있음.
3. SQL Server에서 Top N 쿼리
SQL Server에서는 TOP 또는 OFFSET FETCH를 사용하여 Top N 데이터를 조회할 수 있습니다.
🔹 방법 1: TOP N 사용
SELECT TOP 3 EmployeeName, Salary
FROM Employees
ORDER BY Salary DESC;
쿼리 실행 순서
1️⃣ FROM Employees → 모든 직원 데이터를 조회
2️⃣ ORDER BY Salary DESC → 급여가 높은 순으로 정렬
3️⃣ TOP 3 → 상위 3개의 행만 선택
출력 결과 (동일)
EmployeeName | Salary |
Alice | 7000 |
Bob | 6500 |
Jane | 6000 |
✅ TOP N은 SQL Server에서 가장 기본적인 방식이며, 직관적이고 빠름
🔹 방법 2: OFFSET FETCH 사용 (SQL Server 2012 이상)
SELECT EmployeeName, Salary
FROM Employees
ORDER BY Salary DESC
OFFSET 0 ROWS FETCH NEXT 3 ROWS ONLY;
쿼리 실행 순서
1️⃣ FROM Employees → 모든 직원 데이터를 조회
2️⃣ ORDER BY Salary DESC → 급여가 높은 순으로 정렬
3️⃣ OFFSET 0 ROWS → 첫 번째 행부터 시작
4️⃣ FETCH NEXT 3 ROWS ONLY → 상위 3개의 행만 반환
✅ OFFSET을 활용하면 페이징 처리가 가능하며, 특정 위치부터 조회할 때 유용함
4. 오라클 vs SQL Server Top N 쿼리 비교
DBMS | 사용 방법 | 버전 | 특징 |
Oracle | FETCH FIRST N ROWS ONLY | 12c 이상 | 최신 방식, 가독성 좋음 |
Oracle | ROWNUM 사용 | 전 버전 지원 | 서브쿼리 필요 |
SQL Server | TOP N | 전 버전 지원 | 직관적이고 빠름 |
SQL Server | OFFSET FETCH | 2012 이상 | 페이징 처리 가능 |
5. 결론
✅ 오라클에서는 FETCH FIRST N ROWS ONLY 또는 ROWNUM을 사용하여 Top N 데이터를 조회할 수 있음.
✅ SQL Server에서는 TOP 또는 OFFSET FETCH를 사용하여 상위 N개의 데이터를 쉽게 가져올 수 있음.
✅ OFFSET FETCH를 활용하면 페이징 처리가 가능하며, 대량 데이터 처리에 유용함.
SQLD 자격증 대비를 위해 각 DBMS에서 Top N 쿼리의 차이를 이해하고, 실습을 통해 익숙해지는 것이 중요합니다!