Oracle 기준으로 다음 SQL을 실행한 결과로 옳은 것은?[예약]예… | [SQLD] SQL 개발자 기출유형 모의고사 1회 상세 페이지
1[SQLD] SQL 개발자 기출유형 모의고사 1회
Oracle 기준으로 다음 SQL을 실행한 결과로 옳은 것은?[예약]
| 예약번호 | 인원 | 할인율 |
|---|---|---|
| 1 | 4 | (null) |
| 2 | 2 | 10 |
| 3 | (null) | 0 |
| 4 | 3 | 5 |
SELECT 예약번호, NVL(인원, 1) AS 인원수,
NVL2(할인율, '할인', '정가') AS 구분,
NULLIF(할인율, 0) AS 할인
FROM 예약
ORDER BY 예약번호;1
| 예약번호 | 인원수 | 구분 | 할인 |
|---|---|---|---|
| 1 | 4 | 정가 | (null) |
| 2 | 2 | 할인 | 10 |
| 3 | 1 | 할인 | (null) |
| 4 | 3 | 할인 | 5 |
2
| 예약번호 | 인원수 | 구분 | 할인 |
|---|---|---|---|
| 1 | 4 | 정가 | (null) |
| 2 | 2 | 할인 | 10 |
| 3 | 1 | 할인 | 0 |
| 4 | 3 | 할인 | 5 |
3
| 예약번호 | 인원수 | 구분 | 할인 |
|---|---|---|---|
| 1 | 4 | 정가 | 0 |
| 2 | 2 | 할인 | 10 |
| 3 | 1 | 할인 | (null) |
| 4 | 3 | 할인 | 5 |
4
| 예약번호 | 인원수 | 구분 | 할인 |
|---|---|---|---|
| 1 | 4 | 정가 | (null) |
| 2 | 2 | 할인 | 10 |
| 3 | 1 | 정가 | (null) |
| 4 | 3 | 할인 | 5 |
해설
NVL2는 0도 NULL이 아닌 값으로 보므로 예약번호 3의 구분은 '할인'이고, NULLIF(할인율, 0)은 두 값이 같으면 NULL을 돌려주어 그 행의 할인이 NULL이 된다.
NVL(인원, 1)은 인원이 NULL인 예약번호 3만 1로 바꾸며, 할인율이 NULL인 예약번호 1은 NULLIF 결과도 NULL로 남는다.
- 예약번호 3을 '정가'로 둔 표는 0을 NULL로 착각했다.
- 예약번호 3의 할인을 0으로 둔 표는 NULLIF의 동작을 놓쳤다.
- 예약번호 1의 할인을 0으로 둔 표는 NULLIF가 NULL을 0으로 바꾼다고 보았다.
오류나 개정된 내용이 보이면 알려주세요