반응형
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;
🧾 공식 문서 링크
반응형
'DB' 카테고리의 다른 글
| [MySQL] CALL 프로시저 내 DML 실행 완전 정복 가이드 ⚙️ (0) | 2025.07.03 |
|---|---|
| [MySQL] LOAD DATA INFILE로 대용량 데이터 빠르게 삽입하는 방법 ⚡ (0) | 2025.07.03 |
| [MySQL] DELETE 실패 원인과 해결책 총정리 🧯 (1) | 2025.07.02 |
| [MySQL] DELETE + JSON 조건으로 JSON 데이터 기반 삭제 처리하기 (0) | 2025.07.02 |
| [MySQL] DELETE + 트랜잭션 처리로 안전한 데이터 삭제 구현하기 🔐 (0) | 2025.07.02 |
| [MySQL] DELETE + EXISTS / IN 조건으로 정밀하고 안전하게 데이터 삭제하기 ✂️ (0) | 2025.07.02 |
| [MySQL] DELETE + 서브쿼리로 조건에 맞는 데이터만 정밀하게 삭제하는 방법 (0) | 2025.07.02 |
| [MySQL] DELETE + JOIN으로 두 테이블 이상에서 조건에 맞는 데이터 안전하게 삭제하는 방법 (0) | 2025.07.02 |