MySQL에서 NULL 값 처리하기: IS NULL과 IS NOT NULL
MySQL에서 NULL 값을 조회하거나 필터링할 때는 두 가지 전용 연산자를 사용합니다.
- IS NULL — 값이 NULL인 행을 찾을 때 사용
- IS NOT NULL — 값이 NULL이 아닌 행을 찾을 때 사용
NULL은 '값이 없음' 또는 '알 수 없음'을 의미하는 특수한 상태입니다. 따라서 일반적인 비교 연산자(=, !=)로는 NULL을 판별할 수 없으며, 반드시 위 연산자를 사용해야 합니다.
개념을 이해하기 위해 먼저 테이블을 생성해 보겠습니다. 테이블 생성 쿼리는 다음과 같습니다.
mysql> create table NULL_Demo
-> (
-> UserId int,
-> UserName varchar(20),
-> UserAddress varchar(20)
-> );
Query OK, 0 rows affected (0.67 sec)
예제: 데이터 삽입
INSERT 명령을 사용하여 테이블에 여러 개의 레코드를 삽입해 보겠습니다. 쿼리는 다음과 같습니다.
mysql> insert into NULL_Demo values(12345,'John',NULL);
Query OK, 1 row affected (0.16 sec)
mysql> insert into NULL_Demo values(2345,'Carol','UK');
Query OK, 1 row affected (0.35 sec)
mysql> insert into NULL_Demo values(233444,NULL,NULL);
Query OK, 1 row affected (0.60 sec)
mysql> insert into NULL_Demo values(NULL,NULL,NULL);
Query OK, 1 row affected (0.27 sec)
SELECT 문을 사용하여 테이블의 모든 레코드를 조회해 보겠습니다.
mysql> select *from NULL_Demo;
출력 결과
+--------+----------+-------------+
| UserId | UserName | UserAddress |
+--------+----------+-------------+
| 12345 | John | NULL |
| 2345 | Carol | UK |
| 233444 | NULL | NULL |
| NULL | NULL | NULL |
+--------+----------+-------------+
4 rows in set (0.00 sec)
위 결과에서 일부 컬럼에 NULL 값이 포함되어 있는 것을 확인할 수 있습니다. 이제 IS NULL과 IS NOT NULL을 실제로 활용하는 쿼리 예제를 살펴보겠습니다.
Case 1 — IS NOT NULL 사용 예제
UserId와 UserName 조건에 더해, UserAddress가 NULL이 아닌 레코드만 조회하는 쿼리입니다.
mysql> select *from NULL_Demo where UserId = 2345 AND UserName = 'Carol' AND UserAddress IS NOT NULL;
위 쿼리에서 설정한 조건에 맞는 NOT NULL 레코드가 다음과 같이 출력됩니다.
+--------+----------+-------------+
| UserId | UserName | UserAddress |
+--------+----------+-------------+
| 2345 | Carol | UK |
+--------+----------+-------------+
1 row in set (0.00 sec)
Case 2 — IS NULL 사용 예제
UserName이 'John'이면서 UserAddress가 NULL인 레코드를 조회하는 쿼리입니다.
mysql> select *from NULL_Demo where UserName = 'John' AND UserAddress IS NULL;
위 쿼리에서 설정한 조건에 맞는 NULL 레코드가 다음과 같이 출력됩니다.
+--------+----------+-------------+
| UserId | UserName | UserAddress |
+--------+----------+-------------+
| 12345 | John | NULL |
+--------+----------+-------------+
1 row in set (0.00 sec)
핵심 정리
MySQL에서 NULL 값을 조회할 때는 = NULL이나 != NULL과 같은 비교 연산자가 아닌, IS NULL과 IS NOT NULL을 사용해야 합니다. NULL은 하나의 값이 아니라 '알 수 없는 상태'를 나타내기 때문에 일반적인 비교 연산으로는 판별할 수 없습니다. 이 원칙만 기억하면 NULL이 포함된 데이터도 정확하게 필터링하고 조회할 수 있습니다.