본문 바로가기
SQL

SQL 강의 SQLP SQLD 기출 문제 - 002 ( NULL, CASE, DECODE, NVL 이해 )

by SQL Master 2022. 10. 6.
반응형

이 문제는 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 값을 처리하는 문자열 함수에 대해서 풀어봤습니다.

추가적인 궁금증은 댓글로 달아주세요!! :)

 

반응형

댓글