반응형
이 문제는 SELECT 절에서 NULL 값에 대한 문자열 함수 CASE, DECODE, NVL의 작동 원리를 이해해야 풀 수 있는 문제이다.
문제
아래 테이블에서 수행했을 때 결과 값이 다른 것은?
[TABLE : EMP]
EMP_AMT |
NULL |
0 |
NULL |
0 |
NULL |
1.
SELECT CASE EMP_AMT WHEN NULL THEN -1 ELSE 0 END
FROM EMP
2.
SELECT CASE WHEN EMP_AMT IS NULL THEN -1 ELSE 0 END
FROM EMP
3.
SELECT DECODE( EMP_AMT, NULL, -1, EMP_AMT )
FROM EMP
4.
SELECT NVL( EMP_AMT, -1)
FROM EMP
문제풀이
- CASE 문의 WHEN에서 NULL 조건 비교는 IS NULL로 해야 한다.
- DECODE는 비교값비교 값 NULL이 가능하다. DECODE ( 값, 비교 값, TRUE, FALSE )
- NVL함수는 (값, 값이 NULL일 때 대체 값) * 값이 NULL이 아니면 값을 리턴
1.
SELECT CASE EMP_AMT WHEN NULL THEN -1 ELSE 0 END
FROM EMP
>> 해당 방식의 비교는 EMP_AMT = NULL로 비교를 하는데 이 방식으로는 NULL 값을 찾을 수 없습니다. EMP_AMT IS NULL로 구문으로 비교해야 합니다.
SELECT CASE EMP_AMT WHEN IS NULL THEN -1 ELSE 0 END
FROM EMP
>> IS NULL로 하면 구문에러가 발생합니다. 사용할 수 없습니다.
>> 2번 처럼 풀어야 합니다. ( CASE WHEN EMP_AMT IS NULL THEN -1 ELSE 0 END )
2.
SELECT CASE WHEN EMP_AMT IS NULL THEN -1 ELSE 0 END
FROM EMP
3.
SELECT DECODE( EMP_AMT, NULL, -1, EMP_AMT )
FROM EMP
4.
SELECT NVL( EMP_AMT, -1)
FROM EMP
>> 위에 결과값은 EMP_AMT가 NULL이면 -1을 아니면 0을 리턴한다.
오늘은 NULL 값을 처리하는 문자열 함수에 대해서 풀어봤습니다.
추가적인 궁금증은 댓글로 달아주세요!! :)
반응형
'SQL' 카테고리의 다른 글
SQL 강의 SQLP SQLD 기출 문제 - 006 ( ORACLE AUTO COMMIT ) (0) | 2022.10.10 |
---|---|
SQL 강의 SQLP SQLD 기출 문제 - 005 / 데이터 타입, 묵시적 형변환 (0) | 2022.10.08 |
SQL 강의 SQLP SQLD 기출 문제 - 004 / 다중 IN 조건 이해 (0) | 2022.10.07 |
SQL 강의 SQLP SQLD 기출 문제 - 003 / ORACLE OUTER JOIN 이해 (0) | 2022.10.06 |
SQL 강의 SQLP SQLD 기출 문제 - 001 / INSERT, PRIMARY KEY, NOT NULL 제약 조건 (0) | 2022.10.05 |
댓글