개발/오라클 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을 다루다 위를 차이점을 모르면 전혀 다른 결과를 낼 수 있기 때문에 주의해야한다.