MySQL에서는 CONCAT() 함수와 GROUP_CONCAT() 함수를 함께 사용하면 각 행의 값에 따옴표를 붙인 상태로 하나의 문자열로 결합할 수 있습니다. 이 기법은 IN 절에 사용할 값 목록을 만들거나, CSV 형태의 출력이 필요할 때 특히 유용합니다.
기본 문법
SELECT GROUP_CONCAT(CONCAT('''', yourColumnName, '''' )) as anyVariableName FROM yourTableName;위 문법에서 CONCAT 함수 안의 연속된 작은따옴표('''')는 문자열 내에서 실제 작은따옴표 한 개(')를 의미합니다. 즉, 각 값의 앞뒤에 따옴표가 붙게 됩니다.
예제 테이블 생성
문법을 실제로 확인하기 위해 먼저 테이블을 생성해 보겠습니다.
mysql> create table Group_ConcatDemo
-> (
-> Id int NOT NULL AUTO_INCREMENT,
-> Value int,
-> PRIMARY KEY(Id)
-> );
Query OK, 0 rows affected (1.56 sec)샘플 데이터 삽입
INSERT 명령으로 몇 개의 레코드를 추가합니다.
mysql> insert into Group_ConcatDemo(Value) values(100); Query OK, 1 row affected (0.24 sec) mysql> insert into Group_ConcatDemo(Value) values(120); Query OK, 1 row affected (0.22 sec) mysql> insert into Group_ConcatDemo(Value) values(234); Query OK, 1 row affected (0.11 sec) mysql> insert into Group_ConcatDemo(Value) values(2345); Query OK, 1 row affected (0.24 sec) mysql> insert into Group_ConcatDemo(Value) values(5678); Query OK, 1 row affected (0.14 sec) mysql> insert into Group_ConcatDemo(Value) values(86879); Query OK, 1 row affected (0.16 sec)
저장된 데이터 확인
SELECT 문으로 테이블의 모든 레코드를 조회합니다.
mysql> select *from Group_ConcatDemo;
실행 결과는 다음과 같습니다.
+----+-------+ | Id | Value | +----+-------+ | 1 | 100 | | 2 | 120 | | 3 | 234 | | 4 | 2345 | | 5 | 5678 | | 6 | 86879 | +----+-------+ 6 rows in set (0.00 sec)
GROUP_CONCAT으로 값에 따옴표 붙이기
이제 GROUP_CONCAT() 함수를 사용해 각 값을 작은따옴표로 감싸서 출력하는 쿼리입니다.
mysql> select GROUP_CONCAT(CONCAT('''', Value, '''' )) as SingleQuote from Group_ConcatDemo;실행 결과는 다음과 같습니다.
+-----------------------------------------+ | SingleQuote | +-----------------------------------------+ | '100','120','234','2345','5678','86879' | +-----------------------------------------+ 1 row in set (0.09 sec)
참고 사항
기본적으로 GROUP_CONCAT은 값들을 쉼표(,)로 구분하여 연결합니다. 구분자를 변경하고 싶다면 SEPARATOR 옵션을 사용할 수 있으며, 또한 group_concat_max_len 시스템 변수의 기본값은 1024바이트이므로 대량의 데이터를 처리할 때는 이 값을 조정해야 결과가 잘리지 않습니다.