다음 SQL 의 실행 결과로 옳은 것은?[청구]청구번호계약번호청구금액1… | [SQLD] SQL 개발자 기출유형 모의고사 10회 상세 페이지

1[SQLD] SQL 개발자 기출유형 모의고사 10회
다음 SQL 의 실행 결과로 옳은 것은?

[청구]

청구번호계약번호청구금액
120150
220180
320260
420260
520390
6204(null)
720440
SELECT 청구번호, 계약번호, 청구금액
  FROM 청구 A
 WHERE 청구금액 = (SELECT MAX(청구금액)
                     FROM 청구 B
                    WHERE B.계약번호 = A.계약번호)
 ORDER BY 청구번호;
1
청구번호계약번호청구금액
220180
320260
520390
720440
2
청구번호계약번호청구금액
220180
320260
420260
520390
3
청구번호계약번호청구금액
220180
320260
420260
520390
720440
4
청구번호계약번호청구금액
220180
320260
420260
520390
6204(null)
720440
해설

연관 서브쿼리는 바깥 행 A 의 계약번호를 받아 같은 계약 안의 MAX(청구금액)을 매번 다시 구하므로, 계약마다 최대 금액과 같은 청구가 모두 남는다.

202는 60이 두 건이라 두 건 모두 남고, 204는 MAX 가 NULL 을 무시해 40이 최대가 되며 금액이 NULL 인 청구 6은 = 비교가 UNKNOWN 이라 빠진다.

  • 202에서 한 건만 남긴 표는 동점을 하나로 줄인 것으로, = 비교는 같은 값을 모두 통과시킨다.
  • 204가 빠진 표는 NULL 이 섞이면 MAX 가 NULL 이 된다고 본 오해이다.
  • 청구 6을 넣은 표는 NULL 금액도 최댓값 비교를 통과한다고 본 것이다.

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

이어서 풀어보기

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