MySQL에서 NULL이 아닌 데이터 선택하기
MySQL에서 NULL 값이 포함되지 않은 레코드만 조회하려면 IS NOT NULL 조건을 사용하면 됩니다. 이 조건은 특정 컬럼의 값이 NULL이 아닌 행만 필터링하여 반환합니다.
실제 동작 과정을 확인하기 위해 먼저 테이블을 생성해 보겠습니다.
1. 테이블 생성
mysql> create table DemoTable1792
(
Name varchar(20)
);
Query OK, 0 rows affected (0.00 sec)위 쿼리는 Name이라는 varchar(20) 타입의 컬럼 하나를 가진 테이블을 생성합니다.
2. 샘플 데이터 삽입
insert 명령을 사용해 일부 레코드를 입력합니다. 의도적으로 NULL 값도 함께 넣어 차이를 확인할 수 있도록 합니다.
mysql> insert into DemoTable1792 values('John Smith');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1792 values(NULL);
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1792 values('David Miller');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1792 values(NULL);
Query OK, 1 row affected (0.00 sec)3. 전체 데이터 확인
select 문으로 테이블의 모든 레코드를 조회해 보겠습니다.
mysql> select * from DemoTable1792;
실행 결과는 다음과 같습니다.
+--------------+ | Name | +--------------+ | John Smith | | NULL | | David Miller | | NULL | +--------------+ 4 rows in set (0.00 sec)
총 4개의 레코드 중 2개가 NULL 값임을 확인할 수 있습니다.
4. IS NOT NULL로 NULL 제외하고 조회
NULL 레코드를 제외한 데이터만 선택하는 쿼리는 다음과 같습니다.
mysql> select * from DemoTable1792 where Name IS NOT NULL;
실행 결과:
+--------------+ | Name | +--------------+ | John Smith | | David Miller | +--------------+ 2 rows in set (0.00 sec)
정리
WHERE 절에 IS NOT NULL을 사용하면 해당 컬럼에 실제 값이 존재하는 레코드만 간단히 조회할 수 있습니다. 반대로 NULL인 레코드만 찾고 싶다면 IS NULL을 사용하면 됩니다. 참고로 Name != NULL이나 Name <> NULL 같은 비교 연산자는 NULL 비교에서 항상 UNKNOWN을 반환하므로 작동하지 않으므로, 반드시 IS NOT NULL 구문을 사용해야 합니다.