[SQLD] SQL 개발자 실전문제 2번

2. 다음 중 SQL의 실행 결과가 다른 것을 고르시오.

(1)
SELECT EMPNO, ENAME
FROM EMP
ORDER BY EMPNO
FETCH FIRST 10 ROWS ONLY

(2)
SELECT EMPNO, ENAME
FROM (SELECT EMPNO, ENAME, ROWNUM RN
FROM EMP
ORDER BY EMPNO)
WHERE RN <= 10

(3)
SELECT EMPNO, ENAME
FROM (SELECT EMPNO, ENAME
FROM EMP
ORDER BY EMPNO)
WHERE ROWNUM <= 10

(4)
SELECT EMPNO, ENAME
FROM (SELECT EMPNO, ENAME
, ROW_NUMBER() OVER (ORDER BY EMPNO) RN
FROM EMP)
WHERE RN <= 10

정답 : 2

오라클의 Top N 패턴 SQL에 관한 문제이다.

보기 (1),(3),(4)는 모두 EMPNO를 오름차순으로 정렬했을 때 먼저 출력되는 10개 로우(row)를 조회하는 일반적인 유형이다. 하지만 (2)는 ORDER BY 절의 정렬 처리를 하기 전에 ROWNUM이 먼저 처리되므로 다른 보기와 출력 결과가 다르다.

실무에서도 매우 많이 사용되는 패턴이므로 확실히 이해하고 가자. 가장 중요한 포인트는 같은 쿼리 블록 내에서 ORDER BY절과 ROWNUM을 함께 사용하지 않아야 한다는 것이다.

참고로 FETCH FIRST N ROWS ONLY 문법은 Oracle 12c 부터 지원한다.

Scroll to Top