MySQL에서 데이터를 조회할 때 특정 열에 포함된 NULL 값을 빈 문자열('')로 바꾸어야 하는 경우가 종종 있습니다. 이럴 때 IFNULL() 또는 COALESCE() 함수를 활용하면 간단하게 해결할 수 있습니다. 이번 글에서는 예제 테이블을 만들고, 데이터를 가져오는 시점에 여러 열의 NULL 값을 빈 문자열로 변환하는 방법을 단계별로 살펴보겠습니다.
1. 예제 테이블 생성
먼저 실습에 사용할 테이블을 생성합니다.
mysql> create table DemoTable1849 ( ClientFirstName varchar(20), ClientLastName varchar(20) ); Query OK, 0 rows affected (0.00 sec)
2. 샘플 데이터 삽입
INSERT 명령을 사용하여 테이블에 레코드를 추가합니다. 의도적으로 NULL 값이 포함된 데이터도 함께 넣었습니다.
mysql> insert into DemoTable1849 values('John',NULL);
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1849 values(NULL,'Miller');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1849 values(NULL,NULL);
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1849 values('Chris','Brown');
Query OK, 1 row affected (0.00 sec)
3. 현재 데이터 확인
SELECT 문으로 테이블의 전체 레코드를 조회해 보겠습니다.
mysql> select * from DemoTable1849;
실행 결과는 다음과 같습니다.
+-----------------+----------------+ | ClientFirstName | ClientLastName | +-----------------+----------------+ | John | NULL | | NULL | Miller | | NULL | NULL | | Chris | Brown | +-----------------+----------------+ 4 rows in set (0.00 sec)
위 결과에서 ClientFirstName과 ClientLastName 열에 NULL 값이 그대로 출력되는 것을 확인할 수 있습니다.
4. NULL 값을 빈 문자열로 변환하는 쿼리
아래 쿼리는 데이터를 가져오는 시점에 IFNULL() 함수를 사용하여 두 열의 NULL 값을 빈 문자열로 대체합니다.
mysql> select ifnull(ClientFirstName,'') as ClientFirstName, ifnull(ClientLastName,'') as ClientLastName from DemoTable1849;
실행 결과는 다음과 같습니다.
+-----------------+----------------+ | ClientFirstName | ClientLastName | +-----------------+----------------+ | John | | | | Miller | | | | | Chris | Brown | +-----------------+----------------+ 4 rows in set (0.00 sec)
NULL 값이 모두 빈 문자열로 출력된 것을 확인할 수 있습니다.
IFNULL()과 COALESCE()의 차이점
IFNULL(값, 대체값)은 두 개의 인자만 받으며, 첫 번째 인자가 NULL일 경우 두 번째 인자를 반환합니다. 반면 COALESCE()는 여러 개의 인자를 받을 수 있고, 그중 NULL이 아닌 첫 번째 값을 반환합니다. 따라서 아래와 같이 COALESCE()를 사용해도 동일한 결과를 얻을 수 있습니다.
select coalesce(ClientFirstName,'') as ClientFirstName, coalesce(ClientLastName,'') as ClientLastName from DemoTable1849;
두 함수 모두 원본 테이블의 데이터를 변경하지 않고 조회 결과에서만 NULL을 다른 값으로 치환한다는 점을 기억하시기 바랍니다.