MSSQL NULL데이터 처리하기 ISNULL

NULL데이터, ISNULL이란?

NULL데이터는 아무 데이터도 입력되지 않았을 때 기본으로 입력돼 있는 데이터를 의미합니다.

이러한 NULL데이터는 우리가 예상치 못하게 동작을 할 때가 있습니다.

그럴 때를 대비해 NULL일 때 다른 데이터로 치환하여 처리하는데요

해당 작업을 도와주는 기본내장함수가 바로 ISNULL입니다.

 

ISNULL함수를 활용하여 NULL 데이터를 처리하는 방법을 살펴보겠습니다.

 

ISNULL

문법

SELECT ISNULL(A, B) 
--// A가 NULL이 아니면 > A
--// A가 NULL이면 > B

문법은 매우 간단합니다. A가 NULL일 때 B를 사용합니다.
A, B 모두 NULL일수 있는 경우는 어떻게 하면 될까요? ISNULL함수 두 개를 붙여서 사용하면 됩니다.

SELECT ISNULL(ISNULL(A,B),C)
--// A가 NULL이 아니면 > A
--// A가 NULL이고 B가 NULL이 아니면 > B
--// A, B 둘다 NULL이면 > C

NULL 체크할 데이터가 늘어나 C, D, E.. 또한 NULL일 수 있는 경우 ISNULL 함수를 계속 추가하면 되겠죠?
하지만 그런 식으로 사용할 경우 개인적으로 가독성이 떨어진다고 생각됩니다.
그래서 3개 이상의 ISNULL함수를 써야 할 경우 CASE 문을 사용하여 NULL체크를 하는 게 가독성이 더 좋을 것 같습니다.

SELECT (CASE WHEN A IS NOT NULL THEN A
             WHEN B IS NOT NULL THEN B
             WHEN C IS NOT NULL THEN C
             WHEN D IS NOT NULL THEN D
             ....
        END)

예제

- 하나의 칼럼 NULL일 때 처리

SELECT NICK_NAME
     , ISNULL(GRADE, 'NO GRADE')
  FROM TEMP_TABLE
  
--// GRADE가 NULL이 아닌경우 > GRADE 출력
--// GRADE가 NULL인 경우 > 'NO GRADE' 출력

- 두 개 칼럼 모두 NULL일 때 처리

SELECT NICK_NAME
     , ISNULL(ISNULL(PHONE_NUMBER, TEL_NUMBER), '연락처 없음') AS CONTACT_NUMBER
  FROM TEMP_TABLE
  
--// PHONE_NUMBER가 NULL이 아닌경우 > PHONE_NUMBER 출력
--// PHONE_NUMBER가 NULL, TEL_NUMBER가 NULL이 아닌경우 > TEL_NUMBER 출력
--// PHONE_NUMBER, TEL_NUMBER 둘다 NULL인 경우 > '연락처 없음' 출력

- 변수에 사용, WHERE절에서 사용

💡ISNULL함수는 SELECT문에 조회 칼럼에서만 사용하는 것이 아니라
변수에 사용할 수도 있고 WHERE 절은 물론 변수 또는 칼럼을 사용하는 모든 경우에 사용할 수 있습니다.
IF (ISNULL(@WORK_GB, 1) = 1) --// @WORK_GB변수가 NULL일 경우 1로 취급
BEGIN
    SELECT NICK_NAME
         , HEIGHT
      FROM TEMP_TABLE
     WHERE HEIGHT > ISNULL(@HEIGHT, 150)
END

--// WHERE절에서!!
--// @HEIGHT 변수가 NULL이면 > HEIGHT가 150이상데이터 출력
--// @HEIGHT 변수가 NULL이 아니면 > HEIGHT가 @HEIGHT변수값 이상인 데이터가 출력

이상으로 NULL데이터 처리하는 MSSQL 내장 함수 ISNULL에 대해 살펴보았습니다.
굉장히 자주 쓰이고 유용한 함수이니 잘 숙지하셔서 사용하시면 좋겠습니다.