본문 바로가기
프로그래밍/MySQL

📊 [SQL 프로젝트] 제7장 NULL - 값이 없는 데이터를 찾기

by 강릉바다의 블로그 2026. 6. 28.

제7장 NULL - 값이 없는 데이터를 찾기


오늘의 질문

여러분이 학교에서 학생 연락처를 관리하고 있다고 생각해 봅시다.

그런데 몇몇 학생은 아직 전화번호를 제출하지 않았습니다.

다음 중 어느 것이 맞을까요?

  • 전화번호가 0일까요?
  • 빈 문자열('')일까요?
  • 아니면 아무 값도 없는 상태일까요?

데이터베이스에서는 아무 값도 없는 상태를 특별하게 NULL이라고 부릅니다.

오늘은 이 NULL을 찾는 방법을 배워 보겠습니다.


학습 목표

이번 장을 학습하면 다음 내용을 할 수 있습니다.

  • NULL의 의미를 설명할 수 있다.
  • IS NULL을 사용할 수 있다.
  • IS NOT NULL을 사용할 수 있다.
  • NULL과 0, 빈 문자열의 차이를 설명할 수 있다.

7-1. NULL이란 무엇일까요?

NULL은

값이 없다.

라는 뜻입니다.

많은 학생들이

"빈칸이네요."

라고 생각합니다.

하지만 데이터베이스에서는

빈칸과 NULL은 서로 다른 의미입니다.

예를 들어

전화번호
010-1234-5678
010-9876-5432
NULL

세 번째 학생은

전화번호가 0인 것도 아니고

빈 문자열도 아닙니다.

아직 등록되지 않은 상태입니다.


먼저 실행해 봅시다.

다음 SQL을 실행해 보세요.

SELECT CustomerName,
       Address
FROM Customers
WHERE Address IS NULL;

실행 결과를 확인해 보세요.

만약 결과가 없다면 걱정하지 않아도 됩니다.

현재 데이터에는 주소가 모두 입력되어 있을 수도 있습니다.

중요한 것은

NULL을 찾는 방법을 배우는 것입니다.


7-2. 왜 = NULL을 사용하지 않을까요?

많은 학생들이 이렇게 작성합니다.

SELECT *
FROM Customers
WHERE Address = NULL;

하지만 결과가 나오지 않습니다.

왜 그럴까요?

NULL은

값이 있는 데이터가 아니기 때문입니다.

따라서

=

으로 비교할 수 없습니다.

대신

IS NULL

을 사용해야 합니다.


기억하기

NULL을 찾을 때는

WHERE 열이름 IS NULL

만 기억하면 됩니다.


7-3. SQL을 한 줄씩 읽어 보기

SELECT CustomerName,
       Address
FROM Customers
WHERE Address IS NULL;

영어 문장처럼 읽어 보면

Customers 테이블에서
고객 이름과 주소를 가져와라.
단,
주소가 NULL인 데이터만.

라는 뜻입니다.


7-4. 값이 있는 데이터만 찾기

이번에는

주소가 입력된 고객만 조회해 보겠습니다.

SELECT CustomerName,
       Address
FROM Customers
WHERE Address IS NOT NULL;

이번에는

NULL이 아닌 데이터만 출력됩니다.


IS NOT NULL은 무엇일까요?

NOT은

"아니다."

였습니다.

따라서

IS NOT NULL

NULL이 아니다.

 

즉,

값이 있는 데이터만

가져오라는 뜻입니다.


7-5. NULL과 0은 다릅니다.

예를 들어

학생 시험 점수를 저장한다고 생각해 봅시다.

점수 의미
0 시험을 봤지만 0점
NULL 아직 시험을 보지 않음

둘은 완전히 다른 의미입니다.


NULL과 빈 문자열도 다릅니다.

다음도 서로 다릅니다.

의미
NULL 아직 입력하지 않음
'' 입력은 했지만 내용이 없음

초보자들이 가장 많이 헷갈리는 부분입니다.


💡 잠깐! 이것도 알아두세요

데이터베이스에서 NULL은 "모른다(Unknown)" 또는 "아직 없다(Not Available)"라는 의미로도 사용됩니다.

예를 들어 신입사원의 퇴사일은 아직 정해지지 않았습니다.

따라서 퇴사일은 0도 아니고 빈 문자열도 아니라 NULL로 저장하는 것이 가장 자연스럽습니다.

즉, NULL은 오류가 아니라 아직 결정되지 않은 정보를 표현하는 중요한 값입니다.


학생들이 가장 많이 하는 실수

① = NULL을 사용한다.

잘못된 예

WHERE Address = NULL;

올바른 예

WHERE Address IS NULL;

② != NULL을 사용한다.

잘못된 예

WHERE Address != NULL;

올바른 예

WHERE Address IS NOT NULL;

③ NULL을 따옴표로 묶는다.

WHERE Address = 'NULL';

이것은

문자열 "NULL"을 의미합니다.

NULL과는 전혀 다릅니다.


④ NULL을 0이라고 생각한다.

NULL은

0도 아니고

빈 문자열도 아닙니다.


실무에서는 어떻게 사용할까요?

회사에서는

  • 전화번호가 없는 고객 찾기
  • 이메일이 등록되지 않은 회원 찾기
  • 배송일이 아직 없는 주문 찾기
  • 퇴사일이 없는 직원 찾기

처럼

NULL 조회는 매우 자주 사용됩니다.


실습

실습 1

주소가 NULL인 고객을 조회하세요.

SELECT *
FROM Customers
WHERE Address IS NULL;

실습 2

주소가 입력된 고객만 조회하세요.

SELECT CustomerName,
       Address
FROM Customers
WHERE Address IS NOT NULL;

실습 3

전화번호(Phone)가 NULL이 아닌 배송업체를 조회해 보세요.

SELECT ShipperName,
       Phone
FROM Shippers
WHERE Phone IS NOT NULL;

실무 미션

당신은 고객관리 담당자입니다.

사장님이 말했습니다.

"주소가 등록되지 않은 고객에게 주소 입력 안내 메일을 보내려고 합니다."

 

주소가 없는 고객의 이름과 주소만 조회하는 SQL을 작성해 보세요.


핵심 정리

✔ NULL은 값이 없는 상태를 의미한다.

✔ NULL은 0이 아니다.

✔ NULL은 빈 문자열도 아니다.

✔ NULL은 =으로 비교하지 않는다.

✔ NULL을 찾을 때는 IS NULL을 사용한다.

✔ 값이 있는 데이터는 IS NOT NULL을 사용한다.


연습 문제

기본 문제

  1. NULL은 무엇을 의미하나요?
  2. = NULL을 사용할 수 없는 이유는 무엇인가요?
  3. IS NULL과 IS NOT NULL의 차이를 설명해 보세요.

응용 문제

  1. Products 테이블에서 가격이 NULL인 상품을 조회하는 SQL을 작성해 보세요.
  2. Employees 테이블에서 사진(Photo)이 등록된 직원만 조회하는 SQL을 작성해 보세요.
  3. Customers 테이블에서 주소가 없는 고객의 이름만 조회하는 SQL을 작성해 보세요.

도전 문제

회사에서 다음과 같은 요청이 들어왔습니다.

"주소는 입력되어 있지만 우편번호(PostalCode)는 입력되지 않은 고객을 찾아 주세요."

 

필요한 열만 선택하여 SQL을 작성해 보세요.


다음 장 예고

이번 장에서는 값이 없는 데이터(NULL)를 찾는 방법을 배웠습니다.

하지만 데이터를 조회하다 보면 또 다른 불편함을 만납니다.

예를 들어 고객 목록을 조회했더니 같은 국가가 여러 번 반복되어 나타납니다.

Germany
Germany
Germany
France
France
Brazil
Brazil

사장님은 이렇게 말합니다.

"국가 이름만 한 번씩 보고 싶은데요?"

 

이처럼 중복된 값을 제거하고 고유한 값만 조회하는 기능이 바로 DISTINCT입니다.

다음 장에서는 DISTINCT - 중복을 제거하고 하나만 보기를 배우며, 데이터의 종류를 빠르게 확인하는 방법을 익혀 보겠습니다.