MySQL 테이블에서 두 개 이상의 열(column) 값을 하나로 합쳐야 할 때가 종종 있습니다. 예를 들어 이름과 주소를 한 컬럼에 함께 표시하거나, 여러 필드를 조합해 새로운 식별 문자열을 만들어야 하는 경우입니다. 이럴 때 CONCAT() 문자열 함수를 사용하면 간단하게 해결할 수 있습니다.
CONCAT() 함수란?
MySQL의 CONCAT() 함수는 기본적으로 두 개 이상의 문자열을 하나로 이어 붙이는 역할을 합니다. 물론 단순한 문자열뿐만 아니라 테이블의 열 값을 인수로 전달하여 여러 열의 데이터를 손쉽게 결합할 수도 있습니다.
기본 문법
CONCAT(문자열1, 문자열2, ..., 문자열N)
CONCAT() 함수의 인수에는 결합하고자 하는 문자열들이 순서대로 들어갑니다. 인수의 개수에는 제한이 없으며, 전달된 순서대로 문자열이 연결됩니다.
예제 1: 단순 문자열 결합
먼저 여러 문자열을 그대로 이어 붙이는 기본적인 사용 예시를 살펴보겠습니다.
mysql> SELECT CONCAT('Ram', 'is', 'a', 'good', 'boy') AS Remarks;
+---------------+
| Remarks |
+---------------+
| Ramisagoodboy |
+---------------+
1 row in set (0.00 sec)위 결과에서 볼 수 있듯이, 각 문자열 사이에 공백이 없으면 단어들이 그대로 붙어버립니다. 따라서 실무에서는 구분자(separator)를 직접 넣어주는 것이 좋습니다.
mysql> SELECT CONCAT('Ram', ' ', 'is', ' ', 'a', ' ', 'good', ' ', 'boy') AS Remarks;
+------------------+
| Remarks |
+------------------+
| Ram is a good boy|
+------------------+
1 row in set (0.00 sec)예제 2: 테이블의 여러 열 값 결합하기
마찬가지 방식으로 CONCAT() 함수를 사용하면 테이블에 있는 두 개 이상의 열 값을 하나의 열로 합칠 수 있습니다. 예를 들어 'Student'라는 테이블이 있고, 학생의 ID, 이름, 주소를 하나의 열에 모아서 보고 싶다면 다음과 같은 쿼리를 작성할 수 있습니다.
mysql> SELECT Id, Name, Address,
CONCAT(Id, ', ', Name, ', ', Address) AS 'ID, Name, Address'
FROM Student;
+------+---------+---------+--------------------+
| Id | Name | Address | ID, Name, Address |
+------+---------+---------+--------------------+
| 1 | Gaurav | Delhi | 1, Gaurav, Delhi |
| 2 | Aarav | Mumbai | 2, Aarav, Mumbai |
| 15 | Harshit | Delhi | 15, Harshit, Delhi |
| 20 | Gaurav | Jaipur | 20, Gaurav, Jaipur |
+------+---------+---------+--------------------+
4 rows in set (0.00 sec)위 쿼리에서는 ID, 이름, 주소 세 개의 열 값을 쉼표와 공백(', ')으로 구분하여 하나의 문자열로 만들었습니다. AS 절을 사용해 결과 열에 'ID, Name, Address'라는 별칭(alias)을 지정하면 출력 결과를 훨씬 알아보기 쉽게 만들 수 있습니다.
알아두면 좋은 팁
1. NULL 값 처리 주의
CONCAT() 함수는 인수 중 하나라도 NULL이면 전체 결과가 NULL로 반환됩니다. 열 값에 NULL이 포함될 가능성이 있다면 IFNULL() 함수를 함께 사용하는 것이 안전합니다.
SELECT CONCAT(IFNULL(Name, ''), ', ', IFNULL(Address, '')) FROM Student;
2. CONCAT_WS()로 구분자 깔끔하게 넣기
구분자를 매번 일일이 입력하는 것이 번거롭다면 CONCAT_WS()(Concat With Separator) 함수를 활용해 보세요. 첫 번째 인수로 지정한 구분자가 나머지 문자열들 사이에 자동으로 삽입되며, NULL 값은 무시한다는 장점도 있습니다.
mysql> SELECT CONCAT_WS(', ', Id, Name, Address) AS 'ID, Name, Address'
FROM Student;
+--------------------+
| ID, Name, Address |
+--------------------+
| 1, Gaurav, Delhi |
| 2, Aarav, Mumbai |
| 15, Harshit, Delhi |
| 20, Gaurav, Jaipur |
+--------------------+정리
MySQL에서 두 개 이상의 열 값을 결합하려면 CONCAT() 함수를 사용하면 됩니다. 문자열 리터럴과 열 값을 자유롭게 섞어 사용할 수 있고, AS 절로 별칭을 붙여 가독성을 높일 수 있습니다. NULL 처리가 필요하다면 IFNULL(), 구분자를 편리하게 넣고 싶다면 CONCAT_WS()를 함께 활용하면 더욱 효율적인 쿼리를 작성할 수 있습니다.