SQL에서 NULL이란? 쉽게 이해하는 개념과 실습 예제

Sue·2025년 7월 28일
0
post-thumbnail

🗄️ SQL에서 NULL 완벽 이해하기 (개념 + 예제)

SQL 공부를 하다 보면 가장 먼저 헷갈리는 개념 중 하나가 바로 NULL입니다.
NULL은 단순한 빈 값이 아니라, 알 수 없는 값(unknown)을 의미합니다. 이번 포스팅에서는 NULL의 개념부터 실제 활용 예제까지 정리해 보겠습니다.


✅ NULL이란 무엇인가?

  • NULL은 값이 없는 상태를 의미합니다.
  • 숫자 0이나 빈 문자열 ''과는 전혀 다릅니다.
  • 데이터베이스에서 값이 입력되지 않았거나, 알 수 없는 상태일 때 사용됩니다.

✅ NULL의 특징

  1. NULL과의 연산은 항상 NULL

    SELECT 5 + NULL;  -- 결과: NULL
  2. NULL은 비교 연산이 불가능

    SELECT * FROM users WHERE age = NULL;  -- ❌ 작동 안 함

    ➡️ 반드시 IS NULL 또는 IS NOT NULL을 사용해야 합니다.

  3. NULL은 모든 데이터 타입에서 존재

    • 숫자, 문자열, 날짜 컬럼 등 어디든지 NULL이 있을 수 있습니다.

✅ NULL을 다루는 주요 SQL 문법

🔹 1. IS NULL / IS NOT NULL

NULL 여부를 확인할 때 사용합니다.

-- 상사가 없는 직원만 조회
SELECT name
FROM employees
WHERE manager_id IS NULL;

-- 상사가 있는 직원만 조회
SELECT name
FROM employees
WHERE manager_id IS NOT NULL;

🔹 2. COALESCE 함수

COALESCE는 여러 개의 인자를 받고,
왼쪽부터 차례대로 확인하면서 처음으로 NULL이 아닌 값을 반환합니다.

COALESCE(1,2,3, ...)
  • 값1이 NULL이 아니면 → 값1 반환
    -값1이 NULL이고 값2가 NULL이 아니면 → 값2 반환
  • 모두 NULL이면 → 최종적으로 NULL 반환

따라서 NULL을 다른 값으로 대체할 때 사용합니다.

SELECT COALESCE(NULL, '대체값') AS result;
  • 첫 번째 값이 NULL → 두 번째 값 '대체값' 반환
  • 결과: 대체값

예를 들어, 고객 테이블(customers)의 phone 컬럼에 일부 NULL이 있다고 합시다.

idnamephone
1철수010-1111-2222
2영희NULL
3민수NULL

💡 COALESCE 작동 흐름

  • 철수 → phone이 010-1111-2222 (NULL 아님) → 그대로 반환
  • 영희 → phone이 NULL → '전화번호 없음' 반환
  • 민수 → phone이 NULL → '전화번호 없음' 반환

결과:
| name | phone_number |
| ---- | ------------- |
| 철수 | 010-1111-2222 |
| 영희 | 전화번호 없음 |
| 민수 | 전화번호 없음 |

여러 인자를 사용도 가능하다.

SELECT COALESCE(NULL, NULL, '세 번째 값', '네 번째 값');

✅ 많이 사용하는 이유!

  • NULL을 사용자 친화적인 텍스트(예: 미등록, 알 수 없음)로 바꿀 수 있음
  • 여러 대체값 후보를 넣고, 가장 먼저 존재하는 값을 선택할 수 있음
  • 데이터 표시 시 깔끔하게 정리 가능!
SELECT name, COALESCE(phone, '전화번호 없음') AS phone_number
FROM customers;

💡 COALESCE는 첫 번째로 NULL이 아닌 값을 반환하므로, Null 값일 경우 '전화번호 없음'으로 대체되어 출력됨


🔹 3. IFNULL / NVL (DBMS별 차이)

  • MySQL: IFNULL(컬럼, 대체값)
  • Oracle: NVL(컬럼, 대체값)
SELECT name, IFNULL(email, '이메일 없음') AS email_info
FROM users;

🔹 4. NULLIF 함수

두 값이 같으면 NULL, 다르면 첫 번째 값을 반환합니다.

SELECT NULLIF(10, 10);  -- 결과: NULL
SELECT NULLIF(10, 5);   -- 결과: 10

✅ NULL과 집계 함수의 관계

  • COUNT(*) → NULL 포함 모든 행 카운트
  • COUNT(컬럼명) → NULL은 제외
  • SUM, AVG, MIN, MAX → NULL 자동 제외
-- 총 직원 수 (NULL 포함)
SELECT COUNT(*) FROM employees;

-- 전화번호가 있는 직원 수 (NULL 제외)
SELECT COUNT(phone) FROM employees;

✅ 실전 예제: NULL 처리와 집계

📌 예시 테이블 employees

idnamemanager_idphone
1철수NULL010-1111-2222
2영희1NULL
3민수1010-3333-4444

📍 예제 1) 상사가 없는 직원 조회

SELECT name
FROM employees
WHERE manager_id IS NULL;

결과: 철수


📍 예제 2) 전화번호가 없는 직원에게 ‘미등록’ 표시

SELECT name, COALESCE(phone, '미등록') AS phone_status
FROM employees;

결과:

namephone_status
철수010-1111-2222
영희미등록
민수010-3333-4444

📍 예제 3) 전화번호가 있는 직원 수 카운트

SELECT COUNT(phone) AS phone_count
FROM employees;

결과: 2 (NULL 제외)


✅ 정리

  • NULL은 "모르는 값" 이므로 연산과 비교에서 주의가 필요합니다.
  • IS NULL, IS NOT NULL을 사용해야 제대로 필터링할 수 있습니다.
  • COALESCE, IFNULL, NULLIF 등 함수를 활용하면 NULL 처리 로직이 깔끔해집니다.
  • 집계 함수는 자동으로 NULL을 제외하고 계산합니다.
profile
AI/ML Engineer

0개의 댓글