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

MySQL 테이블에서 NULL 값과 빈 문자열(EMPTY) 개수 구하는 방법

MySQL에서는 NULL빈 문자열('')이 서로 다른 값으로 취급됩니다. 따라서 데이터 검증 작업 시 두 경우를 각각 집계해야 하는 경우가 많습니다. 이 글에서는 CASE 문과 UNION ALL을 활용하여 테이블 내 NULL 값과 빈 문자열의 개수를 한 번에 확인하는 방법을 단계별로 살펴보겠습니다.

1. 예제 테이블 생성

먼저 실습에 사용할 테이블을 생성합니다.

mysql> create table DemoTable781 (
   Name varchar(100)
);
Query OK, 0 rows affected (0.66 sec)

2. 샘플 데이터 삽입

INSERT 명령을 사용하여 빈 문자열('')과 NULL 값을 섞어 레코드를 입력합니다. 총 7개의 행 중 빈 문자열 3개, NULL 3개, 그리고 정상적인 값 1개를 넣어 두 가지 경우를 모두 테스트할 수 있도록 구성했습니다.

mysql> insert into DemoTable781 values('');
Query OK, 1 row affected (0.29 sec)
mysql> insert into DemoTable781 values('Chris');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable781 values('');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable781 values(null);
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable781 values(null);
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable781 values('');
Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable781 values(null);
Query OK, 1 row affected (0.28 sec)

3. 저장된 데이터 확인

SELECT 문으로 테이블의 전체 레코드를 조회해 봅니다.

mysql> select *from DemoTable781;

실행 결과는 다음과 같습니다.

+-------+
| Name  |
+-------+
|       |
| Chris |
|       |
| NULL  |
| NULL  |
|       |
| NULL  |
+-------+
7 rows in set (0.00 sec)

4. NULL 및 빈 문자열 개수를 구하는 쿼리

다음은 테이블에서 NULL 값과 빈 문자열의 개수를 각각 집계하는 쿼리입니다.

mysql> (select SUM(CASE when Name IS NULL THEN 1 ELSE 0 END) AS NullCountAndEmptyCount from DemoTable781)
UNION ALL
(select SUM(CASE when Name='' THEN 1 ELSE 0 END) AS NullCountAndEmptyCount from DemoTable781);

실행 결과는 다음과 같습니다.

+------------------------+
| NullCountAndEmptyCount |
+------------------------+
| 3                      |
| 3                      |
+------------------------+
2 rows in set (0.00 sec)

결과를 보면 첫 번째 행에는 NULL 값 3개, 두 번째 행에는 빈 문자열 3개가 집계된 것을 확인할 수 있습니다.

쿼리 동작 원리

  • SUM(CASE WHEN Name IS NULL THEN 1 ELSE 0 END) — 각 행을 검사하여 값이 NULL이면 1, 아니면 0을 반환하고, SUM으로 이를 모두 더해 NULL 개수를 계산합니다.
  • SUM(CASE WHEN Name = '' THEN 1 ELSE 0 END) — 같은 방식으로 빈 문자열인 행만 골라 개수를 집계합니다.
  • UNION ALL — 두 SELECT 문의 결과를 각각 별도의 행으로 합쳐 하나의 결과셋으로 출력합니다. 중복 제거가 필요 없으므로 UNION 대신 UNION ALL을 사용하면 성능상 유리합니다.

마무리

NULL과 빈 문자열은 겉보기에 비슷하지만 MySQL에서는 완전히 다른 값입니다. 위와 같이 CASE 문과 SUM 함수를 조합하면 특정 조건을 만족하는 행의 개수를 손쉽게 집계할 수 있으며, 데이터 품질 점검이나 입력값 검증 로직을 만들 때 유용하게 활용할 수 있습니다.