MySQL에서 컬럼 값이 NULL일 때 원하는 문자열로 대체하여 조회해야 하는 경우가 자주 있습니다. 이럴 때 가장 간단하고 효과적인 방법은 COALESCE() 함수를 사용하는 것입니다. 아래 예제를 통해 실제 동작 과정을 단계별로 살펴보겠습니다.
1. 테이블 생성하기
먼저 예제에 사용할 테이블을 생성합니다.
mysql> create table DemoTable
-> (
-> Name varchar(100)
-> );
Query OK, 0 rows affected (0.85 sec)
2. 데이터 삽입하기
INSERT 명령어를 사용해 일반 값과 NULL 값을 함께 입력합니다.
mysql> insert into DemoTable values('John');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable values(NULL);
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable values(NULL);
Query OK, 1 row affected (0.20 sec)
mysql> insert into DemoTable values('David');
Query OK, 1 row affected (0.17 sec)3. 전체 레코드 확인하기
SELECT 문으로 테이블의 모든 레코드를 조회해 보겠습니다.
mysql> select *from DemoTable;
출력 결과
+-------+
| Name |
+-------+
| John |
| NULL |
| NULL |
| David |
+-------+
4 rows in set (0.00 sec)
위 결과를 보면 'John'과 'David' 사이에 NULL 값이 두 개 존재하는 것을 확인할 수 있습니다.
4. COALESCE()로 NULL 값 대체하기
이제 컬럼 값이 NULL일 경우 특정 문자열('Not Valid')을 대신 반환하는 쿼리입니다.
mysql> SELECT COALESCE(Name, 'Not Valid') from DemoTable;
출력 결과
+-----------------------------+
| COALESCE(Name, 'Not Valid') |
+-----------------------------+
| John |
| Not Valid |
| Not Valid |
| David |
+-----------------------------+
4 rows in set (0.00 sec)
COALESCE() 함수의 동작 원리
COALESCE()는 인자로 전달된 값들을 왼쪽부터 순서대로 검사하여 첫 번째로 NULL이 아닌 값을 반환하는 함수입니다. 따라서 위 예제에서는 Name 컬럼의 값이 NULL이 아니면 그대로 출력되고, NULL이면 두 번째 인자인 'Not Valid'가 반환됩니다.
참고: IFNULL() 함수도 사용 가능
MySQL에서는 두 개의 인자만 다룰 경우 IFNULL() 함수를 사용할 수도 있습니다.
mysql> SELECT IFNULL(Name, 'Not Valid') from DemoTable;
IFNULL(값1, 값2)는 값1이 NULL이면 값2를, NULL이 아니면 값1을 반환합니다. 결과는 COALESCE와 동일하지만, 세 개 이상의 인자를 처리해야 한다면 COALESCE를 사용하는 것이 좋습니다.