Oracle 기준으로 다음 SQL의 실행 결과로 옳은 것은?[창고]창고… | [SQLD] SQL 개발자 기출유형 모의고사 8회 상세 페이지
1[SQLD] SQL 개발자 기출유형 모의고사 8회
Oracle 기준으로 다음 SQL의 실행 결과로 옳은 것은?[창고]
| 창고코드 | 창고명 |
|---|---|
| W1 | 본관 |
| W2 | 별관 |
| W3 | 냉장 |
| W4 | 야적 |
[재고]
| 창고코드 | 품목코드 | 수량 |
|---|---|---|
| W1 | P1 | 10 |
| W1 | P2 | 5 |
| W3 | P1 | 7 |
| W3 | (null) | 3 |
| W5 | P3 | 4 |
SELECT W.창고코드, COUNT(S.품목코드) AS 품목수, SUM(S.수량) AS 수량합 FROM 창고 W, 재고 S WHERE W.창고코드 = S.창고코드(+) GROUP BY W.창고코드 ORDER BY W.창고코드;
1
| 창고코드 | 품목수 | 수량합 |
|---|---|---|
| W1 | 2 | 15 |
| W2 | 1 | (null) |
| W3 | 1 | 10 |
| W4 | 1 | (null) |
2
| 창고코드 | 품목수 | 수량합 |
|---|---|---|
| W1 | 2 | 15 |
| W2 | 0 | (null) |
| W3 | 1 | 10 |
| W4 | 0 | (null) |
3
| 창고코드 | 품목수 | 수량합 |
|---|---|---|
| W1 | 2 | 15 |
| W3 | 1 | 10 |
4
| 창고코드 | 품목수 | 수량합 |
|---|---|---|
| W1 | 2 | 15 |
| W2 | 0 | (null) |
| W3 | 2 | 10 |
| W4 | 0 | (null) |
해설
(+) 는 짝이 없을 때 NULL 행을 채울 쪽에 붙으므로 이 쿼리는 창고를 기준으로 한 LEFT OUTER JOIN이며, 재고가 없는 W2·W4 도 NULL 과 결합해 남는다.
COUNT(S.품목코드) 는 NULL 을 세지 않아 W2·W4 는 0, 품목코드가 NULL 인 행이 있는 W3 은 1 이고, 창고에 없는 W5 재고는 결과에 나오지 않는다.
- INNER 조인처럼 W2·W4 를 버리면 2행이지만 기준 테이블 행은 보존된다.
- COUNT(*) 라면 W2·W4 가 1 이지만 열을 세므로 0 이다.
- W3 의 품목코드 NULL 행은 COUNT(열) 에서 빠져 2 가 아니다.
오류나 개정된 내용이 보이면 알려주세요