다음 SQL 의 실행 결과로 옳은 것은?[의사]의사번호의사명1윤하2서진… | [SQLD] SQL 개발자 기출유형 모의고사 6회 상세 페이지
1[SQLD] SQL 개발자 기출유형 모의고사 6회
다음 SQL 의 실행 결과로 옳은 것은?[의사]
| 의사번호 | 의사명 |
|---|---|
| 1 | 윤하 |
| 2 | 서진 |
| 3 | 도윤 |
[진료]
| 진료번호 | 의사번호 | 진료비 |
|---|---|---|
| 1 | 1 | 12000 |
| 2 | 1 | (null) |
| 3 | 2 | 8000 |
| 4 | 2 | 3000 |
| 5 | 9 | 5000 |
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
| 의사명 | 건수 | 합계 |
|---|---|---|
| 윤하 | 2 | 12000 |
| 서진 | 2 | 11000 |
| 도윤 | 0 | (null) |
2
| 의사명 | 건수 | 합계 |
|---|---|---|
| 윤하 | 1 | 12000 |
| 서진 | 2 | 11000 |
| 도윤 | 0 | (null) |
3
| 의사명 | 건수 | 합계 |
|---|---|---|
| 윤하 | 2 | 12000 |
| 서진 | 2 | 11000 |
4
| 의사명 | 건수 | 합계 |
|---|---|---|
| 윤하 | 2 | 12000 |
| 서진 | 2 | 11000 |
| 도윤 | 0 | 0 |
해설
스칼라 서브쿼리는 메인쿼리 의사 행마다 값 하나를 계산하므로 진료가 없는 도윤도 결과에 남고, 대상 행이 없으면 COUNT(*) 는 0, SUM 은 NULL 이 된다.
윤하는 진료비가 NULL 인 행도 COUNT(*) 에 세어 2건이고 SUM 은 NULL 을 제외해 12000이며, 의사번호 9 진료는 어느 의사와도 연결되지 않는다.
- 도윤의 합계를 0 으로 본 결과는 빈 집합의 SUM 을 0 으로 오해한 것이다.
- 도윤 행이 빠진 결과는 INNER JOIN 처럼 생각한 것이다.
- 윤하 건수를 1로 본 결과는 COUNT(*) 가 NULL 행을 뺀다고 오해한 것이다.
오류나 개정된 내용이 보이면 알려주세요