MySQL에서 CONCAT() 함수와 GROUP BY 절을 함께 사용하면 이름(First Name)과 성(Last Name)이 저장된 테이블에서 중복을 제거한 고유한 이름 조합만 손쉽게 추출할 수 있습니다. 이번 글에서는 실제 예제를 통해 그 과정을 단계별로 살펴보겠습니다.
1. 테이블 생성하기
먼저 이름과 성을 저장할 테이블을 생성하고, 두 컬럼에 인덱스를 추가합니다.
mysql> create table DemoTable ( FirstName varchar(100), LastName varchar(100) ); Query OK, 0 rows affected (0.92 sec) mysql> alter table DemoTable add index(FirstName,LastName); Query OK, 0 rows affected (1.00 sec) Records: 0 Duplicates: 0 Warnings: 0
2. 샘플 데이터 삽입하기
insert 명령어를 사용해 테이블에 여러 개의 레코드를 삽입합니다. 의도적으로 동일한 이름 조합('Adam Smith', 'John Doe')을 중복해서 넣었습니다.
mysql> insert into DemoTable values('Adam','Smith');
Query OK, 1 row affected (0.73 sec)
mysql> insert into DemoTable values('Adam','Smith');
Query OK, 1 row affected (1.17 sec)
mysql> insert into DemoTable values('John','Doe');
Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable values('Carol','Taylor');
Query OK, 1 row affected (0.25 sec)
mysql> insert into DemoTable values('John','Doe');
Query OK, 1 row affected (0.66 sec)
3. 전체 레코드 확인하기
select 문으로 테이블의 모든 레코드를 조회해 보겠습니다.
mysql> select *from DemoTable;
위 쿼리는 다음과 같은 결과를 출력합니다.
+-----------+----------+ | FirstName | LastName | +-----------+----------+ | Adam | Smith | | Adam | Smith | | Carol | Taylor | | John | Doe | | John | Doe | +-----------+----------+ 5 rows in set (0.00 sec)
총 5개의 레코드가 있으며, 'Adam Smith'와 'John Doe'가 각각 두 번씩 중복되어 저장되어 있는 것을 확인할 수 있습니다.
4. CONCAT()와 GROUP BY로 고유한 이름 조합 조회하기
이제 중복 없는 고유한 이름 조합만 가져오는 쿼리를 작성해 보겠습니다. CONCAT() 함수로 이름과 성을 공백 하나를 사이에 두고 하나의 문자열로 합친 뒤, GROUP BY 절로 동일한 조합을 하나의 그룹으로 묶어 중복을 제거합니다.
mysql> select concat(FirstName,' ',LastName) as combinedName from DemoTable group by LastName,FirstName;
실행 결과는 다음과 같습니다.
+--------------+ | combinedName | +--------------+ | Adam Smith | | Carol Taylor | | John Doe | +--------------+ 3 rows in set (0.00 sec)
결과를 보면 원래 5개였던 레코드가 중복이 제거되어 3개의 고유한 이름 조합만 출력된 것을 확인할 수 있습니다.
마무리
이처럼 CONCAT() 함수로 여러 컬럼을 하나의 문자열로 결합하고, GROUP BY 절로 그룹화하면 중복 데이터를 정리한 깔끔한 결과를 얻을 수 있습니다. 참고로 MySQL에서는 DISTINCT 키워드를 사용하는 방법(select distinct concat(...) from ...)으로도 동일한 결과를 얻을 수 있으니, 상황에 맞게 활용하시기 바랍니다.