지난 글에서는 AS, 별칭(alias)에 대해 공부했습니다.
이번 글에서는 널(NULL)에 대해서 이야기해보고자 합니다. 위키백과에서 NULL의 정의는 다음과 같이 적혀있습니다.
Null 또는 NULL은 구조적 질의 언어(SQL)에서 데이터베이스 내의 데이터 값이 존재하지 않는다는 것을 지시하는데 사용되는 특별한 표시어(special marker) 이다. (중략) “값의 부족”은 0값과 동일한 의미가 아니며, 유사하게 ‘정답의 부족’이라는 말도 정답이 없다는 말과 같은 의미가 아니다. 예를 들어, 다음과 같은 질문을 예로 들어보자. “철수가 책을 몇 권 가지고 있지?” 답은 0(하나도 가지고 있지 않다는 것을 안다면) 또는 null(그가 가지고 있는지, 아닌지 또는 얼마나 가지고 있는 지 모름)일 것이다. 데이터베이스 테이블에서, 이러한 답을 가진 컬럼은 null 값으로 시작할 것이다. 그리고 철수가 책을 가지고 있다는 것이 확인되기 전까지는 0으로 수정되지 않을 것이다.
즉, 위의 말을 해석해보자면 널(NULL)은 값이 없거나 정해지지 않은 것을 의미하며, 0과는 다른 의미를 지닌 값이라는 것입니다. 0이 아니다라는 것이 중요한 것이 쿼리를 짤 때 특정 값에서 특정 값을 계산하는 일이 있을 수 있습니다. 이 경우 NULL이 포함된 쿼리를 짤 경우 계산된 값이 추출되지 않을 수 있습니다.
/* 상품가격 - 할인액 = 실제결제액 */
SELECT item_buy_amount
, discount_amount
, item_buy_amount - discount_amount AS real_amount
FROM abcd
임의로 위와 같이 유저의 결제 내역정보가 포함된 abcd 테이블에서 상품가격과 할인액을 뺀 실제 결제액을 알고 싶다고 가정한다면 회사마다 다르겠지만 할인액이 없는 경우에 NULL값으로 처리하는 경우가 있을 것 입니다. 그렇다면 할인액이 없다면 실제 결제액에 상품가격이 그대로 노출되어야 하지만 NULL값으로 인해 계산된 값도 NULL 값으로 반환되게 됩니다.
결국, 우리는 NULL로 인해 계산된 값을 얻을 수 없기 때문에 특정 값을 0으로 바꿔서 계산되도록 해야합니다. 방법은 크게 2가지가 있는데 쿼리를 예시로 들어 설명하기에는 초보 입장에서 표현하기 어려워 사용하는 구문에 대해서만 말씀드리겠습니다.
1) coalesce 함수 사용 :
coalesce(테이블명, 0)
2) case when 구문 이용 :
case when 테이블명 is null
then 0
else 테이블명
위의 2가지 방법으로 NULL을 0으로 치환한다면, 계산값이 정상적으로 나오게 됩니다.
이번은 지난번보다는 약간 복잡해지는 SQL에 대한 내용이었습니다. 아무래도 블로그에 실제 테이블명과 스터디에서 배운 쿼리를 공유할 수 없다보니 내용을 공유하는데 제한적인 부분이 있습니다. 그래서 NULL에 대한 내용과 NULL이 있음으로 제한적인 부분에 대해 공부했고, NULL을 0으로 치환하는 방법까지 공유했습니다. 다음에도 새로운 내용으로 찾아오겠습니다. 읽어주셔서 감사합니다.
'마케터의 이야기 > SQL 공부' 카테고리의 다른 글
(4) SQL 공부 저장용 - 주석 (초보에게 특히 중요한 주석 사용) (0) | 2022.10.22 |
---|---|
(2) SQL 공부 저장용 - AS, 별칭(alias) 사용법 (0) | 2022.09.19 |
(1) SQL 공부 저장용 - 기본 문법부터 시작 (0) | 2022.08.14 |
최근댓글