Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL에서 NULL과 빈 문자열(공백) 값 제외하고 조회하는 방법

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, 빈 문자열, 공백만 있는 값을 모두 제외한 깨끗한 조회 결과를 얻을 수 있습니다.