문제
Oracle에서 점수가 높은 상위 10명을 정확히 조회하는 SQL로 가장 적절한 것은?
① SELECT * FROM EMP WHERE ROWNUM <= 10 ORDER BY SAL DESC ② SELECT * FROM (SELECT * FROM EMP ORDER BY SAL DESC) WHERE ROWNUM <= 10 ③ SELECT * FROM EMP WHERE ROWNUM > 10 ORDER BY SAL DESC ④ SELECT * FROM EMP ORDER BY SAL DESC WHERE ROWNUM <= 10
정답
2번
해설
정답: 2. Oracle에서 ROWNUM은 ORDER BY보다 먼저 부여될 수 있으므로 먼저 인라인 뷰에서 정렬한 뒤 바깥 쿼리에서 ROWNUM 조건을 적용해야 한다.
오답 풀이
- 1번: ROWNUM이 먼저 적용되어 임의의 10건을 뽑은 뒤 정렬될 수 있다.
- 2번: 정렬 후 상위 10건을 선택하는 올바른 방식이다.
- 3번: ROWNUM > 10 조건은 일반적으로 원하는 결과를 반환하지 못한다.
- 4번: SQL 문법상 WHERE 절 위치가 잘못되었다.
보충 개념 Top-N 쿼리는 정렬과 행 제한의 순서가 중요하다. Oracle 12c 이후에는 FETCH FIRST n ROWS ONLY도 사용할 수 있다.