Database/엑셀로 배우는 SQL 실무 - 입문

[SQL] 엑셀로 배우는 SQL - NULL이란, IS NULL, IS NOT NULL

따라쟁이개발자 2023. 1. 6. 08:00

엑셀 필터를 사용하시면서 '필드값 없음'이라는 문장을 보신 적이 있으실 거에요

'필드값 없음'은 칸에 아예 값이 없는 상태를 말하죠?

엑셀에선 띄어쓰기 없는 공백 '' 을 '필드값 없음'이라고 보기도 하죠

 

하지만, DB에선 조금 다릅니다.

공백 마저도 없는, 값이 지정되지 않은 상태를 나타내는 개념이 따로 있죠.

 

바로 NULL 입니다.

NULL은 SQL에서 = 나 != 로는 다룰 수 없는 개념인데요

 

NULL이란 무엇이며, 어떻게 다뤄야 하는지 알아보겠습니다.

 

 

NULL 이란

위에서도 말했듯 NULL은 값이 지정되지 않은 상태를 의미합니다

정확히는 NULL도 값 중에 하나이니 아직 지정되지 않은 값 이라고 하는게 정확하겠네요.

 

NULL 값은 빈 문자(''), 공백(' '), 0과는 전혀 다른 특별한 값입니다.

주로 빈 문자('') 와 동일하게 생각하시는 경우가 많아 실수 내기 쉬운 값이지요.

 

DB에서 NULL이 포함된 데이터들을 조회해 보면 

'NULL'이라는 텍스트가 보이는 경우도 있고, Oracle Live SQL에서 처럼 '-'로 보이는 경우도 있습니다.

(아래는 Oracle Live SQL에서 PRICE와 STOCK이 NULL인 데이터를 조회한 결과)

 

착각하실 수 있는게,

NULL값 자리가 'NULL' 또는 '-'로 보인다고 해서 그 값이 실제 'NULL', '-'와 같은 문자가 들어있는 건 아닙니다.

NULL값을 표현하는 건 어떤 DB Tool을 쓰시냐에 따라 다 달라요!

 

 

NULL 의 특징

NULL은 아직 지정되지 않은 값이며, 0이나 ''와는 아예 다른 값이라고 했습니다

그렇다 보니 일반 숫자, 텍스트와는 다른 조금 특이한 특징들을 가집니다.

 

  • NULL은 비교 연산자로 비교가 불가능하다 (ex. price = NULL 또는 price = 'NULL' 로는 비교 불가)
  • NULL은 숫자와 연산할 경우 결과가 NULL이다 (ex.  1 + NULL 의 결과값은 NULL)
  • NULL이 포함된 행은 집계에서 제외된다 (ex. price에 NULL이 포함되어 있는 상태에서 count(price)를 할 경우 NULL 행은 제외)

마지막 집계는 아직 다루지 않았고, 실제로 특정 column만 집어서 집계하는 경우도 잘 없어서 그냥 참고만 하시면 됩니다.

 

 

NULL 비교

아래와 같은 Table이 있다고 가정해 볼게요

자몽주스는 아직 가격과 재고가 정해지지 않아 price, stockNULL인 상태입니다

 

NULL 과 같음 (IS NULL)

위 Table에서 가격이 미정 상태인 상품들을 검색하고자 합니다.

가격이 미정이라는 건 가격이 NULL이라는 의미인데요

 

NULL과 같음을 나타낼 때는 비교 연산자 '='가 아닌!

IS NULL이라는 표현식을 사용합니다. 이것도 역시 앞에 비교할 column을 두고 뒤에 IS NULL을 붙여 씁니다.

 

a IS NULLa라는 column이 NULL인 경우 를 나타냅니다.

SELECT * 
FROM beverage_stock
WHERE price IS NULL;

 

NULL 과 같지 않음 (IS NOT NULL)

반대로 NULL이 아닌 값을 찾고자 할때는 비교연산자 '!=', '<>'가 아닌!

IS NOT NULL이라는 표현식을 사용합니다. IS NULL에 부정어인 NOT이 들어간 형태죠.

 

a IS NOT NULLa라는 column이 NULL이 아닌 경우 를 나타냅니다.

 

IS NULL, IS NOT NULL은 정말 말 그대로 영어 문장같지 않나요? 😁

SELECT * 
FROM beverage_stock
WHERE price IS NULL;

 

 

정리

이번 장에선 NULL의 개념과 특징, NULL을 비교하는 방법에 대해 알아 봤습니다.

SQL 실무를 하다보면 이 NULL 값을 꽤 자주 만나게 되실텐데요?

 

NULL은 SQL 뿐만 아니라 Java와 같은 다른 프로그래밍 언어에서도 존재하는 개념입니다.

실제로 Java에서는 이 NULL 값을 처리하는게 굉장히 까다로운 일 중 하나이기도 하죠

 

이렇게 NULL 까지 해서 WHERE 절에서 사용될 만한 개념들은 모두 다뤄 봤는데요

실제로 이 외에도 EXISTS나 서브쿼리 같은 개념들이 더 있지만 지금까지 다룬 것들로도 충분히 데이터 조회가 가능합니다.

 

그럼 이후엔 데이터 통계(갯수, 합계 등)를 낼 때 사용하는 집계함수에 대해 알아보겠습니다.🙂

 

 

[ 참고 ]

 MySQL로 배우는 데이터베이스 개론과 실습

 SQL 개발자 이론서 + 기출문제