개발/오라클 SQL

NULL을 다룰 때 주의할 점

제로칼로리 2022. 12. 23. 17:11
WITH VIEW_TMP AS
(
SELECT NULL AS V1 FROM dual
)
SELECT CASE WHEN V1 = NULL THEN 'NULL입니다' END AS T1
     , CASE WHEN V1 IS NULL THEN 'NULL입니다' END AS T2
     , CASE V1 WHEN  NULL THEN 'NULL입니다' END AS T3
--     , CASE V1 WHEN IS NULL THEN 'NULL입니다' END AS T4  문법 오류
     , DECODE(V1, NULL, 'NULL입니다') AS T5
--     , DECODE(V1, IS NULL, 'NULL입니다') AS T6     문법 오류
  FROM VIEW_TMP
UNION ALL
SELECT CASE WHEN V1 != NULL THEN 'NULL아닙니다' END AS T1
     , CASE WHEN V1 IS NOT NULL THEN 'NULL아닙니다' END AS T2
     , CASE V1 WHEN /*NOT*/ NULL THEN 'NULL아닙니다' END AS T3 --문법 오류
--     , CASE V1 WHEN IS NULL THEN 'NULL아닙니다' END AS T4  문법 오류
     , DECODE(V1,/*NOT*/ NULL, 'NULL입니다') AS T5 --문법 오류
--     , DECODE(V1, IS NULL, 'NULL아닙니다') AS T6     문법 오류
  FROM VIEW_TMP;

 

CASE WHEN 과 DECODE 가 NULL 다루는 방법이 다르다.

CASE WHEN은 키워드를 통한 NULL처리가 아닌 연산자를 통한 연산 시 흔히 생각하는 값이 안나온다.

CASE WHEN에서 NULL을 다룰 때는 무조건 키워드로 다뤄야 한다는 것만 기억하면 된다.

 

통계 쿼리를 낼 때 NULL을 다루다 위를 차이점을 모르면 전혀 다른 결과를 낼 수 있기 때문에 주의해야한다.