COALESCE() 함수란?
MySQL에서 NULL 값은 '값이 존재하지 않음'을 의미하며, 이를 그대로 두면 계산이나 집계 시 예상치 못한 결과를 초래할 수 있습니다. 이때 COALESCE() 함수를 사용하면 NULL 값을 원하는 기본값(예: 0)으로 손쉽게 변환할 수 있습니다.
COALESCE() 함수는 인수로 전달된 값들 중 첫 번째로 NULL이 아닌 값을 반환합니다. 따라서 컬럼 값이 NULL일 경우 대체 값을 지정해 주면 됩니다.
기본 문법
NULL을 0으로 변환하는 기본적인 쿼리 형식은 다음과 같습니다.
SELECT COALESCE(yourColumnName, 0) AS anyAliasName FROM yourTableName;
실습: 테이블 생성하기
먼저 실습에 사용할 테이블을 생성해 보겠습니다.
mysql> create table convertNullToZeroDemo
-> (
-> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> Name varchar(20),
-> Salary int
-> );
Query OK, 0 rows affected (1.28 sec)샘플 데이터 삽입
INSERT 명령어를 사용하여 일부러 NULL 값이 포함된 레코드를 여러 개 삽입합니다.
mysql> insert into convertNullToZeroDemo(Name,Salary) values('John',NULL);
Query OK, 1 row affected (0.20 sec)
mysql> insert into convertNullToZeroDemo(Name,Salary) values('Carol',5610);
Query OK, 1 row affected (0.10 sec)
mysql> insert into convertNullToZeroDemo(Name,Salary) values('Bob',NULL);
Query OK, 1 row affected (0.15 sec)
mysql> insert into convertNullToZeroDemo(Name,Salary) values('David',NULL);
Query OK, 1 row affected (0.12 sec)전체 데이터 조회
SELECT 문으로 테이블의 모든 레코드를 확인해 보겠습니다.
mysql> select *from convertNullToZeroDemo;
실행 결과는 다음과 같습니다. Salary 컬럼에 NULL 값이 여러 개 들어있는 것을 확인할 수 있습니다.
+----+-------+--------+ | Id | Name | Salary | +----+-------+--------+ | 1 | John | NULL | | 2 | Carol | 5610 | | 3 | Bob | NULL | | 4 | David | NULL | +----+-------+--------+ 4 rows in set (0.05 sec)
COALESCE() 함수로 NULL을 0으로 변환
이제 COALESCE() 함수를 사용하여 Salary 컬럼의 NULL 값을 0으로 변환해 보겠습니다.
mysql> select coalesce(Salary,0) as `CONVERT_NULL_TO_0` from convertNullToZeroDemo;
실행 결과는 다음과 같습니다. NULL이었던 값들이 모두 0으로 출력되는 것을 확인할 수 있습니다.
+--------------------+ | CONVERT_NULL_TO_0 | +--------------------+ | 0 | | 5610 | | 0 | | 0 | +--------------------+ 4 rows in set (0.00 sec)
추가 팁: IFNULL() 함수와의 비교
MySQL에서는 COALESCE() 외에도 IFNULL() 함수를 사용하여 같은 작업을 수행할 수 있습니다.
SELECT IFNULL(Salary, 0) AS `CONVERT_NULL_TO_0` FROM convertNullToZeroDemo;
두 함수의 차이점은 다음과 같습니다.
- IFNULL(expr1, expr2): 인수를 정확히 2개만 받으며, expr1이 NULL이면 expr2를 반환합니다.
- COALESCE(expr1, expr2, ...): 인수를 2개 이상 받을 수 있으며, 왼쪽부터 순서대로 검사하여 처음으로 NULL이 아닌 값을 반환합니다.
여러 개의 대체 값을 순차적으로 확인해야 하는 경우에는 COALESCE()가 더 유연하게 활용될 수 있습니다.