무료 동영상 강의 https://youtu.be/a7GbATmGYDM

NULL이란?


NULL은 값이 할당되지 않은(정해지지 않은) 미지의 값이다. NULL은 공백('')이나 스페이스 한칸(' ') 또는 0과는 다르게 값 자체가 없는 상태다.

NULL은 일반적인 값과는 처리 방법이 다르므로 주의가 필요하다. 아래는 회원(Member) 테이블에서, 가입일시(JoinDtm)가 2020년 5월 16일인 데이터를 조회하고 있다. 결과를 보면 LeaveDtm(탈퇴일시)의 값이 일부는 NULL로 채워져 있다.

-- [SQL-3-12-1]
SELECT  T1.MemberId ,T1.JoinDtm ,T1.LeaveDtm
FROM    startdb.Member T1
WHERE   T1.JoinDtm = STR_TO_DATE('20200516','%Y%m%d')
ORDER BY T1.MemberId;

MemberId  JoinDtm              LeaveDtm             
--------  -------------------  -------------------  
M2156     2020-05-16 00:00:00  NULL                 
M2324     2020-05-16 00:00:00  NULL                 
M2338     2020-05-16 00:00:00  NULL                 
M2366     2020-05-16 00:00:00  NULL                 
M2380     2020-05-16 00:00:00  NULL                 
M2422     2020-05-16 00:00:00  NULL                 
M2436     2020-05-16 00:00:00  2021-08-05 00:00:00  

NULL인 데이터를 그대로 화면에 보여줄 수도 있지만, 아래와 같이 IFNULL 함수를 사용하면 NULL 값을 다른 값으로 치환할 수 있다. 아래는 IFNULL을 사용해 LeaveDtm이 NULL인 경우에는 '9999-12-31 00:00:00' 로 치환해서 출력하고 있다.

-- [SQL-3-12-2]
SELECT  T1.MemberId ,T1.JoinDtm ,T1.LeaveDtm
        ,IFNULL(T1.LeaveDtm,'9999-12-31 00:00:00') 탈퇴일자 -- > NULL을 다른 값으로 치환
FROM    startdb.Member T1
WHERE   T1.JoinDtm = STR_TO_DATE('20200516','%Y%m%d')
ORDER BY T1.MemberId;

MemberId  JoinDtm              LeaveDtm             탈퇴일자                 
--------  -------------------  -------------------  -------------------  
M2156     2020-05-16 00:00:00  NULL                 9999-12-31 00:00:00  
M2324     2020-05-16 00:00:00  NULL                 9999-12-31 00:00:00  
M2338     2020-05-16 00:00:00  NULL                 9999-12-31 00:00:00  
M2366     2020-05-16 00:00:00  NULL                 9999-12-31 00:00:00  
M2380     2020-05-16 00:00:00  NULL                 9999-12-31 00:00:00  
M2422     2020-05-16 00:00:00  NULL                 9999-12-31 00:00:00  
M2436     2020-05-16 00:00:00  2021-08-05 00:00:00  2021-08-05 00:00:00  

NULL은 특수한 값으로, NULL에 산술연산을 수행하면 결과는 항상 NULL이 된다. NULL과는 어떤 숫자를 더하거나 빼거나, 곱하거나 나누어도 결과는 항상 NULL이다.

-- [SQL-3-12-3]
SELECT NULL + 1 C1 ,0 + 1 C2 FROM DUAL;

C1    C2  
----  --  
NULL  1   

IS NULL


NULL인 데이터를 조회하기 위해 아래와 같이 동등조건(=)을 사용할 수 없다.

-- [SQL-3-12-4]
SELECT  T1.MemberId ,T1.JoinDtm ,T1.LeaveDtm
        ,IFNULL(T1.LeaveDtm,'9999-12-31 00:00:00') 탈퇴일자
FROM    startdb.Member T1
WHERE   T1.JoinDtm = STR_TO_DATE('20200516','%Y%m%d')
AND     T1.LeaveDtm = NULL
ORDER BY T1.MemberId;

Result   
-------  
No-Data