개요
MySQL에서 두 개 이상의 컬럼 값을 하나로 합칠 때는 CONCAT() 함수를 사용합니다. 하지만 연결하려는 값 중에 NULL이 포함되어 있다면 결과 전체가 NULL로 반환되는 문제가 발생할 수 있습니다. 이때 IFNULL() 함수를 함께 사용하면 NULL 값을 빈 문자열('')로 대체하여 원하는 결과를 얻을 수 있습니다.
이 글에서는 실제 예제를 통해 NULL 값을 무시하고 레코드를 연결하는 방법을 단계별로 살펴보겠습니다.
1. 테스트 테이블 생성
먼저 이름 데이터를 저장할 테이블을 생성합니다.
mysql> create table DemoTable802 (
FirstName varchar(100),
LastName varchar(100)
);
Query OK, 0 rows affected (1.01 sec)
2. 샘플 데이터 삽입
NULL 값이 포함된 다양한 케이스의 레코드를 삽입합니다.
mysql> insert into DemoTable802 values('Adam','Smith');
Query OK, 1 row affected (0.23 sec)
mysql> insert into DemoTable802 values('Carol',NULL);
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable802 values(NULL,'Taylor');
Query OK, 1 row affected (0.09 sec)
mysql> insert into DemoTable802 values(NULL,NULL);
Query OK, 1 row affected (0.21 sec)3. 전체 레코드 확인
SELECT 문으로 테이블의 모든 레코드를 조회해 보겠습니다.
mysql> select *from DemoTable802;
실행 결과는 다음과 같습니다.
+-----------+----------+
| FirstName | LastName |
+-----------+----------+
| Adam | Smith |
| Carol | NULL |
| NULL | Taylor |
| NULL | NULL |
+-----------+----------+
4 rows in set (0.00 sec)
4. NULL 값을 무시하고 레코드 연결하기
이제 IFNULL() 함수를 사용하여 NULL 값을 빈 문자열로 처리한 후, CONCAT()으로 이름과 성을 연결하는 쿼리입니다.
mysql> select concat(IFNULL(FirstName,''),' ',IFNULL(LastName,'')) AS FULL_NAME from DemoTable802;
실행 결과는 다음과 같습니다.
+------------+
| FULL_NAME |
+------------+
| Adam Smith |
| Carol |
| Taylor |
| |
+------------+
4 rows in set (0.00 sec)
결과 분석
- 'Adam' + 'Smith': 두 값 모두 존재하므로 'Adam Smith'로 정상적으로 연결됩니다.
- 'Carol' + NULL: LastName이 NULL이므로 IFNULL()이 이를 빈 문자열로 대체하여 'Carol'만 출력됩니다.
- NULL + 'Taylor': FirstName이 NULL이므로 'Taylor'만 출력됩니다.
- NULL + NULL: 두 값 모두 NULL이므로 빈 문자열이 반환됩니다.
참고: CONCAT_WS()라는 대안
MySQL에서는 CONCAT_WS()(Concat With Separator) 함수를 사용하는 더 간결한 방법도 있습니다. 이 함수는 구분자를 첫 번째 인자로 받으며, 자동으로 NULL 값을 건너뜁니다.
mysql> select concat_ws(' ', FirstName, LastName) AS FULL_NAME from DemoTable802;CONCAT_WS()는 NULL인 인자를 자동으로 무시하므로 IFNULL()을 일일이 작성할 필요가 없어 코드가 더 깔끔해집니다. 상황에 맞게 두 방법 중 편한 것을 선택하면 됩니다.
마무리
MySQL에서 NULL이 포함된 컬럼을 연결할 때는 CONCAT() 단독으로는 의도한 결과를 얻기 어렵습니다. IFNULL()로 NULL을 빈 문자열로 치환하거나, CONCAT_WS()를 활용하면 NULL 값을 무시하고 안전하게 문자열을 연결할 수 있습니다. 실무에서 사용자 이름, 주소 등 여러 컬럼을 조합해 표시할 때 유용하게 활용할 수 있는 패턴이니 꼭 기억해 두세요.