MySQL에서 하나의 열에 대해 NULL 값과 빈 문자열('')을 동시에 제외하고 데이터를 조회해야 하는 경우가 자주 있습니다. 이 글에서는 WHERE 절에 두 가지 조건을 함께 사용하여 원하는 결과를 얻는 방법을 예제와 함께 살펴보겠습니다.
1. 테이블 생성하기
먼저 예제에 사용할 테이블을 생성합니다.
mysql> create table DemoTable635(
EmployeId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
EmployeeName varchar(100)
);
Query OK, 0 rows affected (1.24 sec)
2. 샘플 데이터 삽입하기
INSERT 명령을 사용하여 정상 값, 빈 문자열, NULL 값을 포함한 다양한 레코드를 삽입합니다.
mysql> insert into DemoTable635(EmployeeName) values('John');
Query OK, 1 row affected (0.20 sec)
mysql> insert into DemoTable635(EmployeeName) values('Sam');
Query OK, 1 row affected (0.27 sec)
mysql> insert into DemoTable635(EmployeeName) values('');
Query OK, 1 row affected (0.38 sec)
mysql> insert into DemoTable635(EmployeeName) values(null);
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable635(EmployeeName) values('David');
Query OK, 1 row affected (0.22 sec)3. 전체 데이터 확인하기
SELECT 문으로 테이블의 모든 레코드를 조회해 보겠습니다.
mysql> select *from DemoTable635;
실행 결과는 다음과 같습니다.
+-----------+--------------+
| EmployeId | EmployeeName |
+-----------+--------------+
| 1 | John |
| 2 | Sam |
| 3 | |
| 4 | NULL |
| 5 | David |
+-----------+--------------+
5 rows in set (0.00 sec)
위 결과에서 3번 레코드는 빈 문자열(''), 4번 레코드는 NULL 값이 저장되어 있는 것을 확인할 수 있습니다.
4. NULL과 빈 값을 제외하는 쿼리 작성하기
NULL 값은 IS NOT NULL로, 빈 문자열은 <> ''(같지 않음 연산자)로 각각 필터링하며, 두 조건을 AND로 연결하면 됩니다.
mysql> select *from DemoTable635 tbl
where tbl.EmployeeName is not null
and tbl.EmployeeName <> '';
실행 결과는 다음과 같습니다.
+-----------+--------------+
| EmployeId | EmployeeName |
+-----------+--------------+
| 1 | John |
| 2 | Sam |
| 5 | David |
+-----------+--------------+
3 rows in set (0.02 sec)
정리
MySQL에서 특정 열의 NULL 값과 빈 문자열을 모두 제외하려면 다음 두 조건을 AND 연산자로 결합하면 됩니다.
컬럼명 IS NOT NULL— NULL 값 제외컬럼명 <> ''— 빈 문자열 제외
참고로 MySQL에서 NULL은 비교 연산자로 직접 비교할 수 없기 때문에 반드시 IS NOT NULL을 사용해야 하며, 이 두 조건을 함께 사용해야 의도한 대로 유효한 데이터만 조회할 수 있습니다.