MySQL에서 CONCAT() 함수는 여러 문자열을 하나로 이어 붙이는 데 사용되며, GROUP_CONCAT() 함수는 그룹별로 묶인 여러 문자열 값을 하나의 문자열로 합치는 데 사용됩니다. 이 두 함수를 동일한 쿼리 안에서 함께 사용하면, 그룹화된 각 행의 문자열에 접두사나 구분자를 추가하면서 한 번에 연결할 수 있습니다.
1. 테이블 생성
먼저 예제에 사용할 테이블을 생성합니다.
mysql> create table DemoTable799 (
UserId int,
UserName varchar(100),
UserAge int
);
Query OK, 0 rows affected (0.56 sec)
2. 데이터 삽입
INSERT 명령을 사용하여 테이블에 샘플 레코드를 추가합니다.
mysql> insert into DemoTable799 values(101,'John',21);
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable799 values(102,'Chris',26);
Query OK, 1 row affected (0.22 sec)
mysql> insert into DemoTable799 values(101,'Robert',23);
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable799 values(103,'David',24);
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable799 values(101,'Mike',29);
Query OK, 1 row affected (0.18 sec)
3. 전체 데이터 조회
SELECT 문으로 테이블의 모든 레코드를 확인합니다.
mysql> select *from DemoTable799;
위 쿼리는 다음과 같은 결과를 출력합니다.
+--------+----------+---------+
| UserId | UserName | UserAge |
+--------+----------+---------+
| 101 | John | 21 |
| 102 | Chris | 26 |
| 101 | Robert | 23 |
| 103 | David | 24 |
| 101 | Mike | 29 |
+--------+----------+---------+
5 rows in set (0.00 sec)
4. CONCAT()과 GROUP_CONCAT() 함께 사용하기
다음은 두 함수를 조합하여 문자열을 연결하는 쿼리입니다. CONCAT()으로 각 이름 앞에 'MR.'이라는 접두사를 붙인 후, GROUP_CONCAT()으로 UserId별로 하나의 문자열로 묶습니다.
mysql> select UserId,GROUP_CONCAT(CONCAT('MR.', UserName)) from DemoTable799 group by UserId;실행 결과는 다음과 같습니다.
+--------+---------------------------------------+
| UserId | GROUP_CONCAT(CONCAT('MR.', UserName)) |
+--------+---------------------------------------+
| 101 | MR.John,MR.Robert,MR.Mike |
| 102 | MR.Chris |
| 103 | MR.David |
+--------+---------------------------------------+
3 rows in set (0.00 sec)
결과를 보면 UserId가 101인 John, Robert, Mike가 각각 'MR.' 접두사와 함께 연결되어 하나의 문자열로 출력된 것을 확인할 수 있습니다. 참고로 GROUP_CONCAT()은 기본적으로 쉼표(,)로 값을 구분하며, SEPARATOR 옵션을 사용하면 원하는 구분자로 변경할 수도 있습니다.