5분 SQL

[MYSQL 04] IS NULL / IS NOT NULL / IFNULL / COALESCE 개념과 실습

nightquery 2025. 4. 23. 15:41

| 꼭 기억해야 할 NULL의 특징

  • 실무 데이터에서 NULL은 단순히 "비어 있다"는 뜻이 아니다.
  • NULL은 '값 자체가 존재하지 않는다'는 상태다.
  • NULL은 어떤 값과도 같지 않다 (심지어 NULL끼리도 다르다고 판단됨)
  • = NULL, != NULL은 항상 거짓 ⇒ 반드시 IS NULL, IS NOT NULL 사용
  • NULL은 계산이나 비교 시 자동으로 전파되어 전체 결과를 NULL로 만들 수 있다
  • 다음과 같은 값들과는 완전히 다르다
숫자 0
빈 문자열 ''
공백 ' '

 

 

 

| NULL 기본 문법

  • IS NULL : 특정 컬럼이 값이 없는 상태(NULL) 인지 확인할 때 사용
  • IS NOT NULL : NULL이 아닌 실제 값이 존재하는 경우만 필터링할 때 유용
  • IFNULL(A, B) : A가 NULL이면 B로 대체하여 출력하는 함수 
  • COALESCE(A, B, ...) : 여러 후보 중 가장 먼저 NULL이 아닌 값을 반환하는 함수 

 

 

| 실습용 테이블

SQL은 직접 쿼리를 실행하고 수정해보는 게 핵심!
아직 실습 환경이 없다면, 아래 글을 참고해 DBeaver와 MySQL부터 먼저 세팅해 보자
[SQL] 공부/실습 환경 세팅 – DBeaver + MySQL

 

[SQL] 공부/실습 환경 세팅 – DBeaver + MySQL

IT 직장에서의 N년차, SQL은 선택이 아니라 필수라는 것을 느겼다.24년에 자격증 취득하고 실무에서 조금씩 써먹는 중인데 처음에 겁먹었던 것이 무색하게 할 만하다. 앞으로의 포스팅들은 SQL을

happynestledays.tistory.com

 

CREATE TABLE user_profile (
  user_id INT,
  name VARCHAR(50),
  email VARCHAR(100),
  phone VARCHAR(20)
);

INSERT INTO user_profile (user_id, name, email, phone) VALUES
(101, 'Alice', 'alice@example.com', NULL),
(102, 'Bob', NULL, '010-2222-3333'),
(103, 'Charlie', NULL, NULL),
(104, 'Dana', 'dana@example.com', '010-4444-5555');

 


 

1. 기본 예제 – NULL 조회

● 전화번호가 없는 사용자 찾기

SELECT *
FROM user_profile
WHERE phone IS NULL;

 

 

 

2. 기본 예제 – NOT NULL 필터링

● 이메일이 존재하는 사용자만 보기

SELECT *
FROM user_profile
WHERE email IS NOT NULL;

 

 

 

3. 실무 예제 – NULL 대체 출력 (IFNULL)

● 전화번호가 NULL이면 '미입력'으로 출력

SELECT user_id, name, IFNULL(phone, '미입력') AS phone_status
FROM user_profile;

 

 

 

4. 실무 예제 – 여러 컬럼 중 값이 있는 컬럼부터 조회 (COALESCE)

 

● email 또는 phone 중 하나라도 있으면 첫 번째 값을 조회

SELECT user_id, name, COALESCE(email, phone, '미입력') AS contact_info
FROM user_profile;

 

 

 

5. 실무 예제 – 값이 존재하는 행만 조회 (IS NOT NULL + OR)

● email 또는 phone 중 하나라도 NULL이 아닌 사용자만 보기

SELECT *
FROM user_profile
WHERE email IS NOT NULL OR phone IS NOT NULL;

 

 

 

6. 난이도 UP : 두 컬럼 중 값이 없으면 대체 출력 처리 (IF + COALESCE)

● 연락처 정보(email/phone)가 모두 NULL이면 '미입력', 그 외에는 COALESCE로 표시

SELECT user_id, name,
       IF(email IS NULL AND phone IS NULL, '미입력', COALESCE(email, phone)) AS 연락처
FROM user_profile;

 

 

 

오늘도 고생했다!