MySQL의 COALESCE 함수는 인자로 전달된 여러 값 중에서 첫 번째 NULL이 아닌(NOT NULL) 값을 반환하는 데 사용됩니다. 만약 전달된 모든 컬럼이나 표현식이 NULL이라면 최종적으로 NULL을 반환하며, 하나라도 NULL이 아닌 값이 존재하면 그중 가장 먼저 나오는 값을 돌려줍니다.
COALESCE 기본 문법
SELECT COALESCE(yourColumnName1, yourColumnName2, yourColumnName3, .......N) AS anyVariableName FROM yourTableName;
COALESCE는 두 개 이상의 인자를 받을 수 있으며, 왼쪽에서 오른쪽 순서대로 값을 평가하여 처음 만나는 NULL이 아닌 값을 즉시 반환합니다. 이러한 특성 때문에 여러 컬럼에 분산되어 있는 데이터를 하나의 값으로 통합할 때 매우 유용합니다.
예제 테이블 생성
COALESCE의 동작을 이해하기 위해 먼저 예제용 테이블을 생성해 보겠습니다.
mysql> create table CoalesceDemo -> ( -> Id int, -> Name varchar(100), -> Age int, -> Address varchar(100) -> ); Query OK, 0 rows affected (0.57 sec)
테스트 데이터 삽입
INSERT 명령을 사용해 각 컬럼에 NULL이 섞여 있는 레코드들을 추가합니다.
mysql> insert into CoalesceDemo values(1,NULL,NULL,NULL); Query OK, 1 row affected (0.14 sec) mysql> insert into CoalesceDemo values(NULL,'Mike',NULL,NULL); Query OK, 1 row affected (0.17 sec) mysql> insert into CoalesceDemo values(NULL,NULL,23,NULL); Query OK, 1 row affected (0.24 sec) mysql> insert into CoalesceDemo values(NULL,NULL,NULL,'UK'); Query OK, 1 row affected (0.14 sec) mysql> insert into CoalesceDemo values(NULL,NULL,NULL,NULL); Query OK, 1 row affected (0.17 sec)
저장된 데이터 확인
SELECT 문으로 테이블의 전체 레코드를 조회합니다.
mysql> select *from CoalesceDemo;
실행 결과는 다음과 같습니다.
+------+------+------+---------+ | Id | Name | Age | Address | +------+------+------+---------+ | 1 | NULL | NULL | NULL | | NULL | Mike | NULL | NULL | | NULL | NULL | 23 | NULL | | NULL | NULL | NULL | UK | | NULL | NULL | NULL | NULL | +------+------+------+---------+ 5 rows in set (0.00 sec)
위 데이터를 보면 각 행마다 NULL이 아닌 값이 서로 다른 컬럼에 위치해 있습니다. 마지막 행은 모든 컬럼이 NULL인 경우입니다.
COALESCE로 첫 번째 NOT NULL 값 조회하기
이제 COALESCE 함수를 적용하여 각 행에서 첫 번째 NULL이 아닌 값을 반환받아 보겠습니다.
mysql> select Coalesce(Id,Name,Age,Address) as FirstNotNullValue from CoalesceDemo;
실행 결과는 다음과 같습니다.
+-------------------+ | FirstNotNullValue | +-------------------+ | 1 | | Mike | | 23 | | UK | | NULL | +-------------------+ 5 rows in set (0.00 sec)
결과 해석
- 1행: Id 컬럼의 값 '1'이 NULL이 아니므로 그대로 반환됩니다.
- 2행: Id가 NULL이므로 다음 인자인 Name의 'Mike'가 반환됩니다.
- 3행: Id와 Name이 모두 NULL이므로 Age의 '23'이 반환됩니다.
- 4행: 앞의 세 컬럼이 모두 NULL이므로 Address의 'UK'가 반환됩니다.
- 5행: 모든 컬럼이 NULL이므로 최종적으로 NULL이 반환됩니다.
이처럼 COALESCE 함수는 NULL 처리 로직을 간결하게 작성할 수 있게 해주며, IFNULL 함수보다 더 많은 인자를 처리할 수 있어 실무에서 폭넓게 활용됩니다. 기본값 지정, 대체 컬럼 조회, 데이터 정제 등 다양한 상황에서 유용하게 사용해 보시기 바랍니다.