문제
다음 SQL 문에 포함된 정렬 및 추출 옵션의 결과로 올바른 것은?
① 가장 급여가 높은 3명을 출력하되, 급여가 NULL인 데이터는 후순위로 미룬다. ② 가장 급여가 낮은 3명을 출력한다. ③ 가장 급여가 높은 3명을 출력하되, 급여가 NULL인 데이터를 우선 출력한다. ④ 급여와 상관없이 상위 3개의 행만 출력한다.
정답
1번
해설
정답: 1. SAL DESC 로 급여 내림차순(높은 순) 정렬, NULLS LAST 로 NULL 을 맨 뒤로 보낸 뒤, FETCH FIRST 3 ROWS ONLY 로 상위 3행만 가져온다.
오답 풀이
- ①: 정답. 내림차순 + NULL 후순위 + 상위 3건 추출이라는 세 옵션의 의미를 모두 정확히 담았다.
- ②: DESC 는 내림차순이므로 가장 낮은 3명이 아니라 가장 높은 3명이다.
- ③: NULLS LAST 는 NULL 을 뒤로 미루는 것이라 우선 출력이 아니다.
- ④: ORDER BY SAL 로 급여 기준 정렬이 적용되므로 '상관없이'가 아니다.
보충 개념 FETCH FIRST n ROWS ONLY 는 표준 SQL 의 Top-N 추출 구문으로 Oracle 12c 이상에서 지원한다. Oracle 기본 정렬은 ASC 시 NULLS LAST, DESC 시 NULLS FIRST 이므로, DESC 에서 NULL 을 뒤로 보내려면 NULLS LAST 를 명시해야 한다.