SQL 공부를 하다 보면 가장 먼저 헷갈리는 개념 중 하나가 바로 NULL입니다.
NULL은 단순한 빈 값이 아니라, 알 수 없는 값(unknown)을 의미합니다. 이번 포스팅에서는 NULL의 개념부터 실제 활용 예제까지 정리해 보겠습니다.
0이나 빈 문자열 ''과는 전혀 다릅니다.NULL과의 연산은 항상 NULL
SELECT 5 + NULL; -- 결과: NULL
NULL은 비교 연산이 불가능
SELECT * FROM users WHERE age = NULL; -- ❌ 작동 안 함
➡️ 반드시 IS NULL 또는 IS NOT NULL을 사용해야 합니다.
NULL은 모든 데이터 타입에서 존재
NULL 여부를 확인할 때 사용합니다.
-- 상사가 없는 직원만 조회
SELECT name
FROM employees
WHERE manager_id IS NULL;
-- 상사가 있는 직원만 조회
SELECT name
FROM employees
WHERE manager_id IS NOT NULL;
COALESCE는 여러 개의 인자를 받고,
왼쪽부터 차례대로 확인하면서 처음으로 NULL이 아닌 값을 반환합니다.
COALESCE(값1, 값2, 값3, ...)
따라서 NULL을 다른 값으로 대체할 때 사용합니다.
SELECT COALESCE(NULL, '대체값') AS result;
예를 들어, 고객 테이블(customers)의 phone 컬럼에 일부 NULL이 있다고 합시다.
| id | name | phone |
|---|---|---|
| 1 | 철수 | 010-1111-2222 |
| 2 | 영희 | NULL |
| 3 | 민수 | NULL |
💡 COALESCE 작동 흐름
결과:
| name | phone_number |
| ---- | ------------- |
| 철수 | 010-1111-2222 |
| 영희 | 전화번호 없음 |
| 민수 | 전화번호 없음 |
여러 인자를 사용도 가능하다.
SELECT COALESCE(NULL, NULL, '세 번째 값', '네 번째 값');
✅ 많이 사용하는 이유!
SELECT name, COALESCE(phone, '전화번호 없음') AS phone_number
FROM customers;
💡 COALESCE는 첫 번째로 NULL이 아닌 값을 반환하므로, Null 값일 경우 '전화번호 없음'으로 대체되어 출력됨
IFNULL(컬럼, 대체값)NVL(컬럼, 대체값)SELECT name, IFNULL(email, '이메일 없음') AS email_info
FROM users;
두 값이 같으면 NULL, 다르면 첫 번째 값을 반환합니다.
SELECT NULLIF(10, 10); -- 결과: NULL
SELECT NULLIF(10, 5); -- 결과: 10
COUNT(*) → NULL 포함 모든 행 카운트COUNT(컬럼명) → NULL은 제외SUM, AVG, MIN, MAX → NULL 자동 제외-- 총 직원 수 (NULL 포함)
SELECT COUNT(*) FROM employees;
-- 전화번호가 있는 직원 수 (NULL 제외)
SELECT COUNT(phone) FROM employees;
📌 예시 테이블 employees
| id | name | manager_id | phone |
|---|---|---|---|
| 1 | 철수 | NULL | 010-1111-2222 |
| 2 | 영희 | 1 | NULL |
| 3 | 민수 | 1 | 010-3333-4444 |
SELECT name
FROM employees
WHERE manager_id IS NULL;
결과: 철수
SELECT name, COALESCE(phone, '미등록') AS phone_status
FROM employees;
결과:
| name | phone_status |
|---|---|
| 철수 | 010-1111-2222 |
| 영희 | 미등록 |
| 민수 | 010-3333-4444 |
SELECT COUNT(phone) AS phone_count
FROM employees;
결과: 2 (NULL 제외)
IS NULL, IS NOT NULL을 사용해야 제대로 필터링할 수 있습니다.COALESCE, IFNULL, NULLIF 등 함수를 활용하면 NULL 처리 로직이 깔끔해집니다.