MySQL에서 NULL과 NOT NULL 값이 섞여 있는 열에서 NULL이 아닌 값만 추출하고 싶다면 IS NOT NULL 조건을 사용하면 됩니다. 이 글에서는 실제 예제를 통해 NULL 값을 걸러내고 원하는 데이터만 다른 테이블로 옮기는 과정을 단계별로 살펴보겠습니다.
1. 테이블 생성하기
먼저 날짜 정보를 저장할 테이블을 만들어 보겠습니다.
mysql> create table DemoTable1 ( DueDate date ); Query OK, 0 rows affected (0.00 sec)
2. 샘플 데이터 삽입하기
INSERT 명령을 사용해 NULL 값과 일반 날짜 값을 함께 넣어 보겠습니다.
mysql> insert into DemoTable1 values('2019-09-10');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1 values(NULL);
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1 values('2019-11-10');
Query OK, 1 row affected (0.00 sec)
3. 전체 레코드 확인하기
SELECT 문으로 테이블의 모든 레코드를 조회해 보겠습니다.
mysql> select * from DemoTable1;
실행 결과는 다음과 같습니다. 중간에 NULL 값이 포함되어 있는 것을 확인할 수 있습니다.
+------------+ | DueDate | +------------+ | 2019-09-10 | | NULL | | 2019-11-10 | +------------+ 3 rows in set (0.00 sec)
4. NULL 값 제외하고 데이터 옮기기
이제 두 번째 테이블을 생성한 뒤, IS NOT NULL 조건을 적용해 NULL이 아닌 값만 새 테이블로 복사해 보겠습니다.
mysql> create table DemoTable2 ( AdmissionDate date ); Query OK, 0 rows affected (0.00 sec)
아래 쿼리는 WHERE 절에 IS NOT NULL을 사용하여 DueDate 열에서 NULL이 아닌 값만 골라내어 AdmissionDate 열에 삽입합니다.
mysql> insert into DemoTable2(AdmissionDate) select DueDate from DemoTable1 where DueDate IS NOT NULL; Query OK, 2 rows affected (0.00 sec) Records: 2 Duplicates: 0 Warnings: 0
5. 최종 결과 확인하기
두 번째 테이블의 모든 레코드를 SELECT 문으로 조회해 보겠습니다.
mysql> select * from DemoTable2;
결과를 보면 NULL 값은 완전히 제외되고 유효한 날짜 값 2개만 정상적으로 들어간 것을 확인할 수 있습니다.
+---------------+ | AdmissionDate | +---------------+ | 2019-09-10 | | 2019-11-10 | +---------------+ 2 rows in set (0.00 sec)
정리
IS NOT NULL은 MySQL에서 NULL 값을 필터링할 때 가장 기본적이면서도 강력한 방법입니다. 단순히 = NULL로 비교하면 아무 결과도 반환되지 않으므로, 반드시 IS NULL 또는 IS NOT NULL 구문을 사용해야 한다는 점을 기억하세요. 이 방식은 데이터 정제, 백업 테이블 생성, 조건부 조회 등 다양한 상황에서 유용하게 활용됩니다.