MySQL에서 데이터를 조회하다 보면 특정 컬럼에 NULL 값이나 빈 문자열('')이 저장된 행을 제외해야 하는 경우가 자주 발생합니다. 예를 들어, 사용자 입력값이 누락된 레코드를 필터링하거나 유효한 데이터만 추출하고 싶을 때 유용하게 활용할 수 있습니다.
기본 문법
NULL 값과 공백(빈 문자열)을 모두 건너뛰려면 IS NOT NULL 조건과 <> ''(같지 않음) 조건을 AND 연산자로 함께 사용합니다.
select *from yourTableName where yourColumnName IS NOT NULL AND yourColumnName <> '';
핵심 포인트: MySQL에서는 NULL과 빈 문자열('')이 서로 다른 값으로 취급됩니다. 따라서 두 가지를 모두 제외하려면 반드시 두 조건을 함께 작성해야 합니다.
1단계: 예제 테이블 생성
먼저 실습에 사용할 테이블을 생성합니다.
mysql> create table DemoTable (Id int, FirstName varchar(20)); Query OK, 0 rows affected (0.66 sec)
2단계: 샘플 데이터 삽입
insert 명령어로 다양한 형태의 데이터를 삽입합니다. 일반적인 이름 외에도 빈 문자열(''), NULL, 공백 한 칸(' ')이 포함된 값을 의도적으로 넣어 차이를 확인해 보겠습니다.
mysql> insert into DemoTable values(100,'Larry'); Query OK, 1 row affected (0.14 sec) mysql> insert into DemoTable values(101,''); Query OK, 1 row affected (0.16 sec) mysql> insert into DemoTable values(102,'Chris'); Query OK, 1 row affected (0.16 sec) mysql> insert into DemoTable values(103,null); Query OK, 1 row affected (0.11 sec) mysql> insert into DemoTable values(104,' '); Query OK, 1 row affected (0.10 sec) mysql> insert into DemoTable values(105,'Robert'); Query OK, 1 row affected (0.16 sec) mysql> insert into DemoTable values(106,null); Query OK, 1 row affected (0.13 sec)
3단계: 전체 데이터 조회
select 명령어로 테이블의 전체 레코드를 조회합니다.
mysql> select *from DemoTable;
아래 결과에서 볼 수 있듯이 빈 문자열과 NULL 값이 그대로 함께 출력됩니다.
+------+-----------+ | Id | FirstName | +------+-----------+ | 100 | Larry | | 101 | | | 102 | Chris | | 103 | NULL | | 104 | | | 105 | Robert | | 106 | NULL | +------+-----------+ 7 rows in set (0.00 sec)
4단계: NULL과 공백 값 제외하여 조회
이제 IS NOT NULL과 <> '' 조건을 적용해 NULL과 빈 값을 건너뛴 조회를 실행합니다.
mysql> select *from DemoTable where FirstName IS NOT NULL AND FirstName <> '';
실행 결과 NULL과 빈 문자열이 모두 걸러지고, 실제 값이 존재하는 행만 출력됩니다.
+------+-----------+ | Id | FirstName | +------+-----------+ | 100 | Larry | | 102 | Chris | | 105 | Robert | +------+-----------+ 3 rows in set (0.03 sec)
추가 팁: 공백만 있는 문자열까지 제외하기
위 예제의 Id 104번 행처럼 공백 한 칸(' ')만 저장된 데이터는 <> '' 조건만으로는 걸러지지 않습니다. 이런 값까지 제외하려면 TRIM() 함수를 활용하면 됩니다.
select *from DemoTable where FirstName IS NOT NULL AND TRIM(FirstName) <> '';
이렇게 하면 NULL, 빈 문자열, 공백만 있는 값을 모두 제외한 깨끗한 조회 결과를 얻을 수 있습니다.