MySQL에서 단일 열의 모든 값 연결하기
MySQL에서 특정 열(column)에 있는 모든 값을 하나의 문자열로 합치고 싶다면 GROUP_CONCAT() 함수와 CONCAT() 함수를 함께 사용하면 됩니다. 이 두 함수를 조합하면 각 행의 값을 원하는 형식으로 감싸거나 구분자를 추가한 뒤, 전체를 하나의 결과로 연결할 수 있습니다.
1. 테이블 생성
먼저 예제에 사용할 테이블을 생성합니다.
mysql> create table DemoTable
(
Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
FirstName varchar(20)
);
Query OK, 0 rows affected (0.73 sec)2. 데이터 삽입
INSERT 문을 사용해 몇 개의 레코드를 추가합니다.
mysql> insert into DemoTable(FirstName) values('John');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable(FirstName) values('Larry');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable(FirstName) values('Chris');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable(FirstName) values('Robert');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable(FirstName) values('David');
Query OK, 1 row affected (0.12 sec)3. 저장된 데이터 확인
SELECT 문으로 테이블의 모든 레코드를 조회해 보겠습니다.
mysql> select *from DemoTable;
위 쿼리는 다음과 같은 결과를 출력합니다.
+----+-----------+ | Id | FirstName | +----+-----------+ | 1 | John | | 2 | Larry | | 3 | Chris | | 4 | Robert | | 5 | David | +----+-----------+ 5 rows in set (0.00 sec)
4. GROUP_CONCAT으로 열의 모든 값 연결
이제 GROUP_CONCAT()과 CONCAT()을 조합하여 FirstName 열의 모든 값을 큰따옴표로 감싸고 쉼표로 구분된 하나의 문자열로 연결해 보겠습니다.
mysql> select group_concat(concat('"', FirstName, '"')) AS FirstName from DemoTable;실행 결과는 다음과 같습니다.
+-----------------------------------------+ | FirstName | +-----------------------------------------+ | "John","Larry","Chris","Robert","David" | +-----------------------------------------+ 1 row in set (0.05 sec)
추가 팁: 구분자 변경하기
기본 구분자는 쉼표(,)이지만, SEPARATOR 옵션을 사용하면 원하는 문자로 바꿀 수 있습니다. 예를 들어 세미콜론(;)으로 구분하고 싶다면 아래와 같이 작성합니다.
mysql> select group_concat(FirstName separator '; ') AS FirstName from DemoTable;
또한 값이 많아질 경우 group_concat_max_len 시스템 변수의 기본값(1024바이트)을 초과할 수 있으므로, 필요하다면 다음과 같이 최대 길이를 늘려주는 것이 좋습니다.
SET SESSION group_concat_max_len = 1000000;
이처럼 GROUP_CONCAT()을 활용하면 여러 행에 흩어져 있는 데이터를 손쉽게 하나의 문자열로 병합할 수 있어, 목록 생성이나 CSV 형태의 출력 등 다양한 상황에서 유용하게 사용됩니다.