DB

[MySQL] DELETE + NULL 조건으로 누락 데이터 정리하기 🧹

인생아 2025. 7. 2. 19:08
반응형

MySQL을 운영하다 보면, 종종 컬럼 값이 NULL로 비어 있는 레코드를 정리해야 할 때가 생긴다.
이런 데이터는 사용자 입력 누락, 시스템 오류, 연관 데이터 소실 등 다양한 원인으로 발생한다.
DELETE와 IS NULL 조건을 조합하면 이런 누락된 데이터만 안전하게 삭제할 수 있다.

❓ NULL이란 무엇인가?

NULL은 값이 없다(unknown)는 것을 의미하며, 0, 빈 문자열('')과는 완전히 다르다.
따라서 일반적인 비교 연산자(=, !=)로는 NULL을 감지할 수 없다.

정확하게 확인하려면 반드시 IS NULL 또는 IS NOT NULL을 사용해야 한다.

📌 DELETE + IS NULL 기본 문법

DELETE FROM 테이블명
WHERE 컬럼명 IS NULL;

간단하면서도 강력한 구문이다.
특정 컬럼에 값이 없는 레코드만 삭제한다.

예제 1️⃣: 이메일 주소가 누락된 회원 삭제

DELETE FROM users
WHERE email IS NULL;

회원 가입 중 이메일이 저장되지 않은 사용자만 삭제할 수 있다.

반응형

🔎 DELETE + IS NOT NULL 활용

반대로, 값이 존재하는 데이터만 유지하고 싶을 때는 IS NOT NULL을 사용한다.

DELETE FROM users
WHERE email IS NOT NULL;

※ 주의: 위 쿼리는 이메일이 있는 사용자를 삭제하므로, 의도한 대상이 맞는지 반드시 확인해야 한다.

🧠 복합 조건에서의 NULL 처리

때로는 OR, AND, IN, EXISTS 등 다른 조건절과 함께 NULL을 다뤄야 한다.

예제 2️⃣: 이름이 없거나 전화번호가 없는 사용자 삭제

DELETE FROM users
WHERE name IS NULL OR phone IS NULL;

하나라도 NULL이면 삭제되므로, 데이터 품질 정리에 효과적이다.

💡 CASE WHEN과 결합하여 정교하게 삭제하기

DELETE FROM users
WHERE
  CASE
    WHEN email IS NULL THEN 1
    WHEN phone IS NULL THEN 1
    ELSE 0
  END = 1;

복잡한 논리를 적용할 수 있어, 대규모 데이터 필터링 시 유용하다.

🛑 주의사항 및 팁

  • NULL 비교는 항상 IS NULL / IS NOT NULL을 사용해야 한다
  • = NULL, != NULL은 동작하지 않으며, 항상 FALSE를 반환한다
  • 실수 방지를 위해 삭제 전 SELECT로 확인하는 습관이 중요하다
SELECT * FROM users WHERE email IS NULL;
  • 컬럼이 DEFAULT NULL인 경우, 값이 빠지면 자동으로 NULL로 저장된다
  • NULL 필터 삭제는 트랜잭션과 함께 사용하는 것이 안전하다
START TRANSACTION;
DELETE FROM table_name WHERE column_name IS NULL;
COMMIT;

🧾 공식 문서 링크

 

반응형