MySQL에서 특정 열에 저장된 NULL 레코드를 제거하려면 DELETE 명령어와 IS NULL 조건을 함께 사용하면 됩니다. 기본 문법은 다음과 같습니다.
DELETE FROM yourTableName WHERE yourColumnName IS NULL;
IS NULL 연산자는 해당 열의 값이 NULL인 행만 정확히 찾아내는 역할을 합니다. 주의할 점은 = NULL이 아닌 반드시 IS NULL을 사용해야 한다는 것입니다. NULL은 값 자체가 아니라 '값이 없음'을 의미하기 때문에 일반적인 비교 연산자로는 판별할 수 없습니다.
예제 테이블 생성하기
먼저 실습용 테이블을 생성해 보겠습니다.
mysql> create table removeNullRecordsDemo
-> (
-> Name varchar(100)
-> );
Query OK, 0 rows affected (0.50 sec)테이블에 데이터 삽입하기
다음은 INSERT 명령을 사용해 이름 데이터와 함께 의도적으로 NULL 값을 여러 개 삽입하는 쿼리입니다.
mysql> insert into removeNullRecordsDemo values('John');
Query OK, 1 row affected (0.14 sec)
mysql> insert into removeNullRecordsDemo values(null);
Query OK, 1 row affected (0.15 sec)
mysql> insert into removeNullRecordsDemo values('Larry');
Query OK, 1 row affected (0.19 sec)
mysql> insert into removeNullRecordsDemo values('Bob');
Query OK, 1 row affected (0.12 sec)
mysql> insert into removeNullRecordsDemo values(null);
Query OK, 1 row affected (0.13 sec)
mysql> insert into removeNullRecordsDemo values('David');
Query OK, 1 row affected (0.18 sec)
mysql> insert into removeNullRecordsDemo values(null);
Query OK, 1 row affected (0.22 sec)전체 레코드 조회하기
SELECT 문으로 테이블의 모든 레코드를 확인해 보겠습니다.
mysql> select *from removeNullRecordsDemo;
실행 결과는 다음과 같습니다. 총 7개의 행 중 3개가 NULL임을 확인할 수 있습니다.
+-------+ | Name | +-------+ | John | | NULL | | Larry | | Bob | | NULL | | David | | NULL | +-------+ 7 rows in set (0.00 sec)
NULL 레코드 삭제하기
이제 DELETE 명령과 IS NULL 조건을 사용해 Name 열의 NULL 레코드를 모두 제거해 보겠습니다.
mysql> delete from removeNullRecordsDemo where Name IS NULL; Query OK, 3 rows affected (0.16 sec)
총 3개의 NULL 행이 성공적으로 삭제되었습니다.
삭제 결과 확인하기
다시 전체 레코드를 조회하여 NULL이 제거되었는지 확인해 보겠습니다.
mysql> select * from removeNullRecordsDemo;
실행 결과 NULL을 제외한 유효한 레코드만 남아 있는 것을 볼 수 있습니다.
+-------+ | Name | +-------+ | John | | Larry | | Bob | | David | +-------+ 4 rows in set (0.00 sec)
마무리 및 참고 사항
이처럼 DELETE FROM 테이블명 WHERE 열명 IS NULL; 구문 하나로 NULL 레코드를 손쉽게 정리할 수 있습니다. 대량의 데이터를 다룰 때는 삭제 전 SELECT COUNT(*)로 해당 조건의 행 수를 미리 확인하고, 필요하다면 트랜잭션(START TRANSACTION, COMMIT, ROLLBACK)을 활용해 안전하게 작업하는 것이 좋습니다. 또한 애초에 NOT NULL 제약조건을 설정해 두면 NULL 값의 입력 자체를 방지할 수 있으므로, 테이블 설계 단계에서 이를 고려하는 것도 좋은 방법입니다.