SQL- NULL속성의 이해

박현·2022년 9월 11일
1

SQL

목록 보기
9/34

DBMS를 사용하다 보면 Null값으로 인한 많은 특이사항들을 접하게 된다. Null값이 가지는 특성을 이해하지 못한다면 데이터 오류를 경험할 수 있으므로 반드시 숙지해야 할 부분중 하나이다. 다음 모델을 보고 사례별로 Null값에 대해 알아보자.

위의 주문모델을 보면 주문금액과 주문최소금액이 Null허용인 것을 알 수 있다.
Null 값을 가질 수 있는 속성은 몇가지 특성이 존재한다.

1. Null 값의 연산은 언제나 Null이다.

Null값은 공백이나 숫자0과는 전혀 다른 의미이다. 아직 정의되지 않은 미지의 값 또는 현재 데이터를 입력하지 못하는 경우를 의미한다. 즉 Null은 값이 존재하지 않음을 말한다.

-주문데이터-

주문번호주문금액주문취소금액
1100001100,00020,000
110000215,000
SELECT 주문금액-주문취소금액 COL1
		,NVL(주문금액-주문취소금액,0) COL2
        ,NVL(주문금액,0)-NVL(주문취소금액,0) COL3
 FROM 주문

위의 주문데이터를 바탕으로 위의 SQL의 결과를 예측해보자.

-SQL 수행결과-

COL1COL2COL3
80,00080,00080,000
015,000

수행결과를 보면 최종 주문금액이 다르게 출력되는것을 볼 수 있다.
COL1 쿼리문을 보면 Null값이 존재하지않는 첫번재 행은 정상적으로 출력되었다. 하지만 Null값이존재하는 두번째행에서 15,000-null = null 이라는 Null값을 반환하게된다. 이처럼 Null에 대한 특성을 인지하지 않는다면 COL1,COL2처럼 잘못된 결과를 반환할 수 있다는 것을 숙지해야 한다.


2. 집계함수는 Null값을 제외하고 처리한다.

-주문데이터-

주문번호주문금액주문취소금액
1100001100,000
110000215,000
110000340,000
110000445,000
1100005100,000
SELECT SUM(주문금액) - SUM(주문취소금액) COL1
		,NVL(SUM(주문금액-주문취소금액),0) COL2
        ,NVL(SUM(주문금액),0) - NVL(SUM(주문취소금액),0) COL3
 FROM 주문

위의 주문데이터를 바탕으로 위의 SQL의 결과를 예측해보자.
COL1,2,3은 최종주문금액 총합을 구하는 식이다.

COL1COL2COL3
0300,000

이 경우 SUM함수는 정의된 컬럼의 값을모두 합산하는 함수로서 Null값이 들어올 경우 이는 제외하고 처리한다. 즉 집계함수의 경우 Null값을 제외한다는 특성을 이해해야만 올바른 결과를 출력할 수 있다.

이 밖에도 Null값에 문제가 발생하는 경우는 많다. 중요한 것은 속성에 Null값이 존재한다면 이처럼 많은 사항을 고려해야 한다는 점이다. 그렇기에 모델을 생성할때 업무를 정확히 파악하여 Null허용 여부를 판단해야 한다.


출처: SQL전문가가이드

0개의 댓글