MySQL에서 단일 열에 저장된 여러 값을 각각 따옴표로 묶어 하나의 문자열로 합치고 싶다면 group_concat() 함수와 replace() 함수를 함께 사용하면 됩니다. 이 글에서는 실제 예제를 통해 단계별로 방법을 살펴보겠습니다.
1단계: 테이블 생성
먼저 예제에 사용할 테이블을 생성합니다.
mysql> create table DemoTable1799 ( EmployeeId varchar(20) ); Query OK, 0 rows affected (0.00 sec)
2단계: 데이터 삽입
insert 명령을 사용해 쉼표로 구분된 직원 ID 값들을 테이블에 삽입합니다.
mysql> insert into DemoTable1799 values('101,102,103,104');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1799 values('106,109');
Query OK, 1 row affected (0.00 sec)3단계: 저장된 데이터 확인
select 문으로 테이블의 모든 레코드를 조회해 보겠습니다.
mysql> select * from DemoTable1799;
위 쿼리는 다음과 같은 결과를 출력합니다.
+-----------------+ | EmployeeId | +-----------------+ | 101,102,103,104 | | 106,109 | +-----------------+ 2 rows in set (0.00 sec)
DISTINCT와 GROUP_CONCAT, CONCAT으로 값에 따옴표 붙이기
이제 group_concat()과 concat(), 그리고 distinct를 조합하여 각 값을 작은따옴표로 묶는 쿼리를 실행해 보겠습니다.
mysql> select group_concat(distinct concat("'", replace(EmployeeId, "," , "','") , "'")) as Output from DemoTable1799;위 쿼리는 다음과 같은 결과를 출력합니다.
+-------------------------------------+ | Output | +-------------------------------------+ | '101','102','103','104','106','109' | +-------------------------------------+ 1 row in set (0.00 sec)
쿼리 동작 원리
이 쿼리가 어떻게 동작하는지 살펴보면 다음과 같습니다.
1. replace()로 구분자 변환: replace(EmployeeId, ",", "','")는 쉼표(,)를 ','로 바꿉니다. 예를 들어 101,102,103,104는 101','102','103','104가 됩니다.
2. concat()으로 따옴표 추가: 앞뒤에 작은따옴표를 붙여 '101','102','103','104' 형태의 완전한 문자열을 만듭니다.
3. distinct로 중복 제거: group_concat(distinct ...)를 사용하므로 결과에서 중복된 값은 자동으로 제거됩니다. 이 예제에서 두 행의 데이터가 하나의 결과로 병합되면서 중복 없이 모든 직원 ID가 따옴표로 묶인 형태로 출력되었습니다.
이 방식은 IN 절에 동적으로 값을 전달해야 하거나, CSV 형태의 데이터를 SQL 문자열 목록으로 변환해야 할 때 특히 유용하게 활용할 수 있습니다.