Oracle(12c 이상) 기준으로 도서 테이블에서 대출수 상위 3권의… | [SQLD] SQL 개발자 기출유형 모의고사 5회 상세 페이지

1[SQLD] SQL 개발자 기출유형 모의고사 5회
Oracle(12c 이상) 기준으로 도서 테이블에서 대출수 상위 3권의 제목을 구하려 한다. 실행 시 오류가 발생하는 것은?

㉠

SELECT 제목
  FROM (SELECT 제목,
               ROW_NUMBER() OVER (ORDER BY 대출수 DESC) AS RN
          FROM 도서)
 WHERE RN <= 3;

㉡

SELECT 제목,
       ROW_NUMBER() OVER (ORDER BY 대출수 DESC) AS RN
  FROM 도서
 WHERE RN <= 3;

㉢

SELECT 제목
  FROM 도서
 ORDER BY 대출수 DESC
 FETCH FIRST 3 ROWS ONLY;

㉣

SELECT 제목
  FROM (SELECT 제목 FROM 도서 ORDER BY 대출수 DESC)
 WHERE ROWNUM <= 3;
1
㉣
2
㉠
3
㉢
4
㉡
해설

㉡은 같은 SELECT 절에서 만든 별칭 RN 을 WHERE 절에서 쓰는데, WHERE 는 SELECT 보다 먼저 처리되고 윈도우 함수는 WHERE 절에 쓸 수 없으므로 오류가 난다.

ROW_NUMBER 로 Top N 을 구하려면 ㉠처럼 인라인 뷰에서 순번을 만든 뒤 바깥 쿼리에서 걸러야 한다.

  • ㉠은 인라인 뷰에서 만든 RN 을 바깥 WHERE 에서 비교하므로 정상 실행된다.
  • ㉢의 FETCH FIRST 3 ROWS ONLY 는 Oracle 12c 부터 지원하는 Top N 구문이다.
  • ㉣은 정렬된 인라인 뷰에 ROWNUM 조건을 걸어 상위 3행을 바르게 구한다.

오류나 개정된 내용이 보이면 알려주세요

이어서 풀어보기

[SQLD] SQL 개발자 기출유형 모의고사 5회 50문항 이어서 보기문제·정답·해설을 한 페이지에서 이어서 볼 수 있어요SQLD SQL 개발자 실전 모의고사 암기장 전체 보기