예약 테이블에 대해 다음 SQL 을 실행한 결과로 옳은 것은?예약예약번… | [SQLD] SQL 개발자 기출유형 모의고사 2회 상세 페이지
1[SQLD] SQL 개발자 기출유형 모의고사 2회
예약 테이블에 대해 다음 SQL 을 실행한 결과로 옳은 것은?예약
| 예약번호 | 인원 | 확정인원 | 메모 |
|---|---|---|---|
| 1 | 4 | 4 | 창가 |
| 2 | 3 | (null) | (null) |
| 3 | (null) | (null) | (null) |
| 4 | 5 | 2 | 유아 |
SELECT 예약번호,
COALESCE(확정인원, 인원, 0) AS P,
NULLIF(인원, 확정인원) AS Q,
CASE WHEN 메모 IS NULL THEN 'N' ELSE 'Y' END AS R
FROM 예약
ORDER BY 예약번호;1
| 예약번호 | P | Q | R |
|---|---|---|---|
| 1 | 4 | (null) | Y |
| 2 | 3 | 3 | N |
| 3 | 0 | (null) | N |
| 4 | 2 | 5 | Y |
2
| 예약번호 | P | Q | R |
|---|---|---|---|
| 1 | 4 | (null) | Y |
| 2 | 3 | (null) | N |
| 3 | 0 | (null) | N |
| 4 | 2 | 5 | Y |
3
| 예약번호 | P | Q | R |
|---|---|---|---|
| 1 | 4 | (null) | Y |
| 2 | 3 | 3 | N |
| 3 | 0 | (null) | N |
| 4 | 5 | 5 | Y |
4
| 예약번호 | P | Q | R |
|---|---|---|---|
| 1 | 4 | 4 | Y |
| 2 | 3 | 3 | N |
| 3 | 0 | (null) | N |
| 4 | 2 | 5 | Y |
해설
COALESCE는 왼쪽부터 처음 만나는 NULL 아닌 값을 돌려주어 예약번호 4 행은 확정인원 2, 두 값이 모두 NULL 인 예약번호 3 행은 0이 된다.
NULLIF(a, b)는 두 값이 같을 때만 NULL 이고 다르면 a 를 돌려주므로 4와 4가 같은 첫 행만 NULL, 확정인원이 NULL 인 둘째 행은 3이다.
- 첫 행의 Q 를 4로 본 것은 같을 때 NULL 이 된다는 규칙을 뒤집은 것이다.
- 둘째 행의 Q 를 NULL 로 본 것은 NULL 과의 비교를 같음으로 오해한 것이다.
- 마지막 행의 P 를 5로 본 것은 COALESCE 인자 순서를 놓친 것이다.
오류나 개정된 내용이 보이면 알려주세요