MySQL에서 NULL을 0으로 변환하는 방법
MySQL에서 쿼리 결과에 포함된 NULL 값을 0으로 반환해야 하는 경우가 자주 있습니다. 예를 들어, 집계 결과나 리포트를 만들 때 NULL 대신 0을 표시하는 것이 훨씬 읽기 편합니다. 이럴 때 사용할 수 있는 것이 바로 IFNULL() 함수입니다.
IFNULL()의 기본 문법은 다음과 같습니다.
IFNULL(표현식, 0);
첫 번째 인자의 값이 NULL이면 두 번째 인자로 지정한 값(여기서는 0)을 반환하고, NULL이 아니라면 원래 값을 그대로 반환합니다.
1. 예제용 테이블 생성하기
먼저 실습에 사용할 테이블을 생성하겠습니다.
mysql> create table NullDemoWithZero
-> (
-> id varchar(200)
-> );
Query OK, 0 rows affected (0.65 sec)
2. 데이터 삽입하기
테이블 생성 후 INSERT 명령어를 사용해 일부러 NULL 값이 포함된 레코드들을 삽입합니다.
mysql> insert into NullDemoWithZero values();
Query OK, 1 row affected (0.16 sec)
mysql> insert into NullDemoWithZero values('123');
Query OK, 1 row affected (0.14 sec)
mysql> insert into NullDemoWithZero values('442');
Query OK, 1 row affected (0.10 sec)
mysql> insert into NullDemoWithZero values('333');
Query OK, 1 row affected (0.13 sec)
mysql> insert into NullDemoWithZero values();
Query OK, 1 row affected (0.15 sec)
mysql> insert into NullDemoWithZero values();
Query OK, 1 row affected (0.17 sec)
참고로 values()처럼 아무 값도 지정하지 않으면 해당 컬럼에는 NULL이 저장됩니다.
3. 현재 데이터 확인하기
SELECT 문으로 전체 레코드를 조회해 보겠습니다.
mysql> select *from NullDemoWithZero;
실행 결과는 다음과 같습니다.
+------+
| id |
+------+
| NULL |
| 123 |
| 442 |
| 333 |
| NULL |
| NULL |
+------+
6 rows in set (0.00 sec)
위 출력 결과를 보면 여러 개의 NULL 값이 그대로 노출되는 것을 확인할 수 있습니다.
4. IFNULL()로 NULL을 0으로 변환하기
이제 NULL 값을 0으로 바꿔서 조회하는 문법을 살펴보겠습니다.
select IFNULL(컬럼명, 0) from 테이블명;
위 문법을 실제 테이블에 적용해 보겠습니다.
mysql> select IFNULL(id, 0) from NullDemoWithZero;
실행 결과 모든 NULL이 0으로 반환됩니다.
+---------------+
| IFNULL(id, 0) |
+---------------+
| 0 |
| 123 |
| 442 |
| 333 |
| 0 |
| 0 |
+---------------+
6 rows in set (0.00 sec)
정리 및 추가 팁
IFNULL(id, 0)은 id 컬럼의 값이 NULL일 경우 0을, 값이 존재할 경우 원래 값을 반환합니다. 이 방식은 SELECT뿐만 아니라 WHERE 절, ORDER BY, 계산식 등 다양한 곳에서 활용할 수 있습니다.
참고로 MySQL에는 IFNULL() 외에도 유사한 기능을 제공하는 함수들이 있습니다.
- COALESCE(컬럼명, 0): 표준 SQL 함수로, 인자 중 첫 번째로 NULL이 아닌 값을 반환합니다. 여러 개의 대체 값을 순차적으로 지정할 수 있어 더 유연합니다.
- CASE WHEN: 조건이 복잡한 경우 CASE 표현식으로 NULL 처리 로직을 직접 작성할 수 있습니다.
단순히 하나의 컬럼에 대한 기본값 처리라면 IFNULL()이 가장 간결하고 직관적인 선택입니다.