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에 대해 살펴보았습니다.
굉장히 자주 쓰이고 유용한 함수이니 잘 숙지하셔서 사용하시면 좋겠습니다.