Oracle 에서 관객수 2~3위 영화를 구하려 한다. 의도한 두 행을… | [SQLD] SQL 개발자 기출유형 모의고사 9회 상세 페이지

1[SQLD] SQL 개발자 기출유형 모의고사 9회
Oracle 에서 관객수 2~3위 영화를 구하려 한다. 의도한 두 행을 정확히 돌려주는 SQL 은? (관객수에 NULL·동점은 없다)

[영화]

제목관객수
파도900
정원700
추적800
별빛500
노을600
㉠ SELECT 제목, 관객수
     FROM (SELECT 제목, 관객수 FROM 영화
            ORDER BY 관객수 DESC)
    WHERE ROWNUM BETWEEN 2 AND 3;

㉡ SELECT 제목, 관객수
     FROM 영화
    WHERE ROWNUM <= 3 AND ROWNUM >= 2
    ORDER BY 관객수 DESC;

㉢ SELECT 제목, 관객수
     FROM (SELECT ROWNUM AS RN, A.*
             FROM (SELECT 제목, 관객수 FROM 영화
                    ORDER BY 관객수 DESC) A)
    WHERE RN BETWEEN 2 AND 3;

㉣ SELECT ROWNUM AS RN, 제목, 관객수
     FROM (SELECT 제목, 관객수 FROM 영화
            ORDER BY 관객수 DESC)
    WHERE RN BETWEEN 2 AND 3;
1
㉠
2
㉡
3
㉣
4
㉢
해설

ROWNUM 은 조건을 통과한 행에 1부터 차례로 붙으므로 첫 행이 1 이 되지 못하면 다음 행도 1 이 되어 ROWNUM >= 2 류 조건은 0건이 된다.

㉢처럼 정렬한 인라인 뷰에 ROWNUM 을 별칭 RN 으로 고정한 뒤 바깥에서 RN 범위를 걸어야 추적·정원 두 행이 나온다.

  • ㉠은 ROWNUM BETWEEN 2 AND 3 이라 첫 행부터 탈락해 결과가 없다.
  • ㉡도 ROWNUM >= 2 를 만족하는 행이 없고 정렬도 번호 부여 뒤에 일어난다.
  • ㉣은 같은 쿼리 블록의 WHERE 에서 SELECT 별칭 RN 을 쓸 수 없어 오류가 난다.

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

이어서 풀어보기

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