다음 SQL 의 실행 결과로 옳은 것은?[의사]의사번호의사명1윤하2서진… | [SQLD] SQL 개발자 기출유형 모의고사 6회 상세 페이지

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

[의사]

의사번호의사명
1윤하
2서진
3도윤

[진료]

진료번호의사번호진료비
1112000
21(null)
328000
423000
595000
SELECT D.의사명,
       (SELECT COUNT(*) FROM 진료 J
         WHERE J.의사번호 = D.의사번호) AS 건수,
       (SELECT SUM(J.진료비) FROM 진료 J
         WHERE J.의사번호 = D.의사번호) AS 합계
  FROM 의사 D
 ORDER BY D.의사번호;
1
의사명건수합계
윤하212000
서진211000
도윤0(null)
2
의사명건수합계
윤하112000
서진211000
도윤0(null)
3
의사명건수합계
윤하212000
서진211000
4
의사명건수합계
윤하212000
서진211000
도윤00
해설

스칼라 서브쿼리는 메인쿼리 의사 행마다 값 하나를 계산하므로 진료가 없는 도윤도 결과에 남고, 대상 행이 없으면 COUNT(*) 는 0, SUM 은 NULL 이 된다.

윤하는 진료비가 NULL 인 행도 COUNT(*) 에 세어 2건이고 SUM 은 NULL 을 제외해 12000이며, 의사번호 9 진료는 어느 의사와도 연결되지 않는다.

  • 도윤의 합계를 0 으로 본 결과는 빈 집합의 SUM 을 0 으로 오해한 것이다.
  • 도윤 행이 빠진 결과는 INNER JOIN 처럼 생각한 것이다.
  • 윤하 건수를 1로 본 결과는 COUNT(*) 가 NULL 행을 뺀다고 오해한 것이다.

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

이어서 풀어보기

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