DB

[MySQL] IS NULL과 IS NOT NULL 완전 정복! 조건절로 놓치지 말아야 할 핵심 포인트

인생아 2025. 6. 26. 16:51
반응형

MySQL에서 데이터를 조회할 때 자주 마주치는 상황이 있습니다. 바로 NULL 값이 들어 있는 컬럼을 필터링하거나 NULL이 아닌 데이터만 추출해야 할 때입니다. 이럴 때 사용하는 문법이 바로 IS NULL, IS NOT NULL입니다.

IS NULL과 IS NOT NULL은 SQL 쿼리 최적화, 데이터 무결성 검사, 누락 데이터 탐색 등의 실전 상황에서 꼭 필요한 문법입니다.

✅ NULL이란 무엇인가?

SQL에서 NULL은 값이 없음(nothing)을 의미합니다. 이는 0이나 빈 문자열과는 완전히 다른 개념으로, "알 수 없음" 또는 "정의되지 않음"을 나타냅니다.

SELECT * FROM users WHERE email IS NULL;

이 쿼리는 email 컬럼이 값이 없는(정의되지 않은) 모든 사용자를 조회합니다.

🔎 참고로 알아두세요

  • NULL = NULL은 FALSE입니다.
  • IS NULL만이 NULL을 정확히 비교하는 방법입니다.
  • = NULL, <> NULL 은 항상 FALSE 또는 UNKNOWN으로 처리됩니다.
반응형

✅ IS NULL 조건절

IS NULL은 특정 컬럼이 NULL인 레코드만 필터링합니다.

SELECT user_id, name
FROM users
WHERE phone_number IS NULL;

🔍 활용 예시: 회원가입은 완료했지만 아직 연락처 정보를 입력하지 않은 사용자 조회

✅ IS NOT NULL 조건절

반대로 IS NOT NULL은 컬럼에 실제 값이 존재하는 행만 조회합니다.

SELECT user_id, name
FROM users
WHERE birth_date IS NOT NULL;

🔍 활용 예시: 생년월일 정보가 있는 사용자만을 대상으로 생일 프로모션 메시지를 발송할 때

✅ NULL은 비교 연산자가 통하지 않는다!

아래 쿼리를 보세요.

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

이 쿼리는 결과가 없습니다. 왜냐하면 NULL은 어떤 값과도 같다고 판단하지 않기 때문입니다. 오직 IS NULL을 사용해야 정확한 비교가 가능합니다.

✅ 다양한 예제와 활용법

1. 주문이 등록되지 않은 고객 조회

SELECT customer_id, name
FROM customers
WHERE last_order_date IS NULL;

이 쿼리는 한 번도 주문을 하지 않은 고객을 찾을 때 유용합니다. 마케팅 타겟팅이나 리텐션 분석에서 많이 사용됩니다.

2. NULL과 NOT NULL 조건을 조합한 쿼리

SELECT *
FROM employees
WHERE manager_id IS NOT NULL
  AND termination_date IS NULL;

🔍 해석: 퇴사하지 않고, 상사가 배정된 직원 목록을 조회합니다.

반응형

3. IFNULL 함수와 함께 사용

SELECT name, IFNULL(phone_number, '미입력') AS 연락처
FROM users;

이 쿼리는 phone_number가 NULL인 경우 "미입력"으로 대체하여 출력합니다. UI 단에서 친절한 표시를 원할 때 유용합니다.

✅ 성능 팁과 주의사항

  • IS NULL 조건을 자주 사용하는 컬럼이라면 해당 컬럼에 인덱스를 설정해도 효율이 떨어질 수 있습니다.
  • NOT NULL 제약조건은 테이블 설계 시 데이터 무결성에 매우 유용합니다.
  • JOIN 문에서 NULL 처리를 할 때는 LEFT JOIN 결과의 NULL 여부를 잘 활용해야 합니다.

✅ JOIN과 IS NULL을 활용한 실전 예제

SELECT u.name
FROM users u
LEFT JOIN orders o ON u.id = o.user_id
WHERE o.id IS NULL;

 

🔍 해석: 주문 이력이 없는 사용자 목록 조회
이처럼 LEFT JOIN 후 IS NULL 조건을 사용하면 데이터 누락 확인이나 비활성 사용자 추적이 가능합니다.

✅ 공식문서로 더 공부하기

 

반응형