NULL 처리
NULL 값은 ‘값이 없음’ 또는 ‘알 수 없음’을 의미합니다. 0이나 공백 또는 빈 문자열을 의미하지 않습니다. NULL 값은 알 수 없는 값이 아닙니다. NULL 값은 고객이 아직 메일 주소를 제공하지 않은 경우와 같이 아직 제공되지 않은 값에 사용할 수 있습니다. 앞서 살펴본 것처럼 값이 대상 데이터 형식과 호환되지 않는 경우 일부 변환 함수에서 NULL 값을 반환할 수도 있습니다.
NULL을 처리하기 위해 특별한 단계를 수행해야 하는 경우가 많습니다. NULL은 실제로 값이 아닙니다. 알 수 없는 것입니다. 어떤 것과도 같지 않으며 어떤 것과도 다르지 않습니다. NULL은 어떤 것보다도 크거나 작지 않습니다. 어떤 것인지는 알 수 없지만 NULL 값을 사용해야 하는 경우도 있습니다. 다행히 T-SQL은 NULL 값의 변환 또는 대체를 위한 함수를 제공합니다.
ISNULL
ISNULL 함수는 두 가지 인수를 사용합니다. 첫 번째는 테스트 중인 식입니다. 첫 번째 인수의 값이 NULL이면 함수는 두 번째 인수를 반환합니다. 첫 번째 식이 null이 아니면 변경되지 않은 상태로 반환됩니다.
예를 들어 데이터베이스의 Sales.Customer 테이블에 NULL 값을 허용하는 MiddleName 열이 포함되어 있다고 가정합니다. 이 테이블을 쿼리할 때 결과에서 NULL을 반환하는 대신 “None”과 같은 특정 값을 반환하도록 선택할 수 있습니다.
SELECT FirstName,
ISNULL(MiddleName, 'None') AS MiddleIfAny,
LastName
FROM Sales.Customer;
이 쿼리의 결과는 다음과 같을 수 있습니다.
FirstName
MiddleIfAny
LastName
Orlando
14.
Gee
Keith
없음
Howard
Donna
F.
Gonzales
...
...
...
참고
NULL로 대체되는 값은 계산할 식과 동일한 데이터 형식이어야 합니다. 위의 예에서 MiddleName은 varchar이므로 대체 값은 숫자일 수 없습니다. 또한 데이터에 일반 값으로 표시되지 않을 값을 선택해야 합니다. 경우에 따라 데이터에 표시되지 않는 값을 찾기가 어려울 수 있습니다.
이전 예에서는 원본 테이블에서 NULL 값을 처리했지만 ISNULL 함수 내에서 TRY_CONVERT 함수를 중첩하는 식 등 NULL을 반환할 수 있는 모든 식에 ISNULL을 사용할 수 있습니다.
COALESCE
ISNULL 함수는 ANSI 표준이 아니므로 COALESCE 함수를 대신 사용하고자 할 수 있습니다. COALESCE는 각각이 식인 가변 개수의 인수를 사용할 수 있다는 점에서 좀 더 유연합니다. 목록에서 NULL이 아닌 첫 번째 식을 반환합니다.
인수가 두 개만 있는 경우에는 COALESCE가 ISNULL과 마찬가지로 동작합니다. 그러나 인수가 세 개 이상인 경우에는 ISNULL을 사용하는 다중 파트 CASE 식 대신 COALESCE를 사용할 수 있습니다.
모든 인수가 NULL이면 COALESCE는 NULL을 반환합니다. 모든 식은 동일한 데이터 형식 또는 호환되는 데이터 형식을 반환해야 합니다.
구문은 다음과 같습니다.
SELECT COALESCE ( expression1, expression2, [ ,...n ] )
다음 예에서는 HR.Wages라는 가상의 테이블을 사용합니다. 이 테이블에는 직원들의 주간 수익에 대한 정보를 포함하는 세 개의 열(시급, 주급, 판매 단위당 수수료)이 포함되어 있습니다. 그러나 각 직원은 이 중 한 종류의 급여만 받습니다. 각 직원에 대해 이 세 열 중 하나만 값을 갖고 다른 두 열은 NULL이 됩니다. 각 직원에게 지불된 총금액을 확인하기 위해 COALESCE를 사용하여 세 열에 있는 null이 아닌 값만 반환할 수 있습니다.
SELECT EmployeeID,
COALESCE(HourlyRate * 40,
WeeklySalary,
Commission * SalesQty) AS WeeklyEarnings
FROM HR.Wages;
결과는 다음과 같을 수 있습니다.
EmployeeID
WeeklyEarnings
1
899.76
2
1001.00
3
1298.77
...
...
NULLIF
NULLIF 함수를 사용하면 특정 조건에서 NULL을 반환할 수 있습니다. 이 함수는 빈 또는 자리 표시자 문자를 NULL로 바꾸려는 경우 데이터 정리와 같은 영역에 유용한 애플리케이션을 포함합니다.
NULLIF는 두 개의 인수를 사용하고 동일한 경우 NULL을 반환합니다. 두 값이 같지 않으면 NULLIF는 첫 번째 인수를 반환합니다.
이 예제에서 NULLIF는 0의 할인율을 NULL로 바꿉니다. 이 값이 0이 아니면 할인율을 반환합니다.
SELECT SalesOrderID,
ProductID,
UnitPrice,
NULLIF(UnitPriceDiscount, 0) AS Discount
FROM Sales.SalesOrderDetail;
결과는 다음과 같을 수 있습니다.
SalesOrderID
ProductID
단가
할인
71774
836
356.898
NULL
71780
988
112.998
0.4
71781
748
818.7
NULL
71781
985
112.998
0.4
...
...
...
...