MySQL에서 한 필드의 값이 NULL로 설정되어 있을 때, 같은 행의 다른 필드 값을 대신 가져오고 싶은 경우가 종종 있습니다. 이럴 때 COALESCE() 함수를 활용하면 간단하게 해결할 수 있습니다.
COALESCE() 함수란?
COALESCE()는 인자로 전달된 값들 중 NULL이 아닌 첫 번째 값을 반환하는 MySQL 함수입니다. 따라서 FirstName이 NULL이면 SecondName을, 그 반대의 경우에는 FirstName을 반환하도록 쿼리를 작성할 수 있습니다.
예제 테이블 생성
먼저 예제에 사용할 테이블을 생성해 보겠습니다.
mysql> create table DemoTable1336
-> (
-> FirstName varchar(20)
-> ,
-> SecondName varchar(20)
-> );
Query OK, 0 rows affected (0.64 sec)
레코드 삽입
insert 명령을 사용하여 테이블에 몇 개의 레코드를 삽입합니다.
mysql> insert into DemoTable1336 values('John',NULL);
Query OK, 1 row affected (0.21 sec)
mysql> insert into DemoTable1336 values(NULL,'Chris');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable1336 values('David','Mike');
Query OK, 1 row affected (0.18 sec)테이블 데이터 확인
select 문을 사용하여 테이블의 모든 레코드를 조회합니다.
mysql> select * from DemoTable1336;
위 쿼리는 다음과 같은 결과를 출력합니다.
+-----------+------------+
| FirstName | SecondName |
+-----------+------------+
| John | NULL |
| NULL | Chris |
| David | Mike |
+-----------+------------+
3 rows in set (0.00 sec)
출력 결과를 보면 일부 행에서 FirstName 또는 SecondName이 NULL로 저장되어 있는 것을 확인할 수 있습니다.
COALESCE()를 사용한 대체 값 선택
다음은 필드가 NULL로 설정되어 있어도 다른 필드의 값을 선택하는 쿼리입니다.
mysql> select coalesce(FirstName,SecondName) as AlternateName from DemoTable1336;
위 쿼리는 다음과 같은 결과를 출력합니다.
+---------------+
| AlternateName |
+---------------+
| John |
| Chris |
| David |
+---------------+
3 rows in set (0.00 sec)
FirstName이 NULL인 두 번째 행에서는 SecondName인 'Chris'가 반환되었고, SecondName이 NULL인 첫 번째 행에서는 FirstName인 'John'이 반환된 것을 볼 수 있습니다. 이처럼 COALESCE() 함수를 사용하면 NULL 값을 깔끔하게 처리하면서 원하는 데이터를 손쉽게 조회할 수 있습니다.