MySQL에서 NULL이 아닌 레코드만 조회하려면 IS NOT NULL 연산자를 사용하면 됩니다. 이 연산자는 특정 컬럼의 값이 NULL이 아닌 행만 필터링하여 반환합니다.
실제 예제를 통해 살펴보겠습니다. 먼저 테이블을 생성합니다.
1. 테이블 생성
mysql> create table DemoTable
-> (
-> FirstName varchar(100)
-> );
Query OK, 0 rows affected (3.01 sec)
2. 데이터 삽입
insert 명령을 사용하여 일부 레코드를 삽입합니다. 이때 의도적으로 NULL 값도 함께 넣습니다.
mysql> insert into DemoTable values('John');
Query OK, 1 row affected (0.44 sec)
mysql> insert into DemoTable values(NULL);
Query OK, 1 row affected (0.58 sec)
mysql> insert into DemoTable values('Chris');
Query OK, 1 row affected (0.31 sec)
mysql> insert into DemoTable values(NULL);
Query OK, 1 row affected (0.20 sec)
mysql> insert into DemoTable values('Robert');
Query OK, 1 row affected (0.34 sec)
mysql> insert into DemoTable values(NULL);
Query OK, 1 row affected (0.23 sec)3. 전체 레코드 확인
select 문을 사용하여 테이블의 모든 레코드를 조회해 보겠습니다.
mysql> select *from DemoTable;
위 쿼리는 다음과 같은 결과를 출력합니다.
출력 결과
+-----------+
| FirstName |
+-----------+
| John |
| NULL |
| Chris |
| NULL |
| Robert |
| NULL |
+-----------+
6 rows in set (0.00 sec)
총 6개의 레코드 중 3개가 NULL 값임을 확인할 수 있습니다.
4. NULL 제외하고 조회하기
NULL 값을 무시하고 레코드를 표시하려면 WHERE 절에 IS NOT NULL 조건을 추가합니다.
mysql> select *from DemoTable where FirstName IS NOT NULL;
위 쿼리는 다음과 같은 결과를 출력합니다.
출력 결과
+-----------+
| FirstName |
+-----------+
| John |
| Chris |
| Robert |
+-----------+
3 rows in set (0.02 sec)
결과에서 NULL 값을 가진 레코드가 모두 제외되고, 실제 값이 있는 3개의 레코드만 출력된 것을 확인할 수 있습니다.
참고 사항
NULL 값 비교 시 주의할 점은 = NULL 또는 != NULL처럼 비교 연산자를 사용하면 안 된다는 것입니다. MySQL에서 NULL은 '알 수 없는 값'을 의미하기 때문에 일반적인 비교 연산으로는 판별할 수 없으며, 반드시 IS NULL 또는 IS NOT NULL을 사용해야 올바른 결과를 얻을 수 있습니다.