MySQL에서 여러 개의 열(column) 값을 하나의 문자열로 합쳐야 할 때가 있습니다. 이럴 때 CONCAT() 함수를 사용하면 손쉽게 해결할 수 있습니다. 이 글에서는 테이블에 어떤 열이 있는지 확인하는 방법부터, 모든 열을 연결하는 실전 예제까지 단계별로 살펴보겠습니다.
1단계: 테이블의 열 목록 확인하기
먼저 해당 테이블에 몇 개의 열이 존재하는지, 그리고 각 열의 이름이 무엇인지 알아야 합니다. 아래 구문을 사용하면 열 이름과 데이터 타입 등 상세 정보를 확인할 수 있습니다.
show columns from yourTableName;
2단계: CONCAT으로 모든 열 연결하기
열 이름을 확인했다면, 다음 구문처럼 CONCAT 함수 안에 연결하고자 하는 열들을 나열하기만 하면 됩니다.
select concat(yourColumnName1,yourColumnName2,yourColumnName3,........N) from yourTableName;
실전 예제로 따라 하기
테이블 생성
먼저 예제용 테이블을 생성해 보겠습니다.
mysql> create table DemoTable
(
CustomerId int,
CustomerName varchar(20),
CustomerAge int
);
Query OK, 0 rows affected (0.66 sec)열 정보 확인
생성된 테이블의 정확한 열 정보를 조회합니다.
mysql> show columns from DemoTable;
실행 결과는 다음과 같습니다.
+--------------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +--------------+-------------+------+-----+---------+-------+ | CustomerId | int(11) | YES | | NULL | | | CustomerName | varchar(20) | YES | | NULL | | | CustomerAge | int(11) | YES | | NULL | | +--------------+-------------+------+-----+---------+-------+ 3 rows in set (0.00 sec)
레코드 삽입
INSERT 명령어를 사용해 테이블에 데이터를 입력합니다.
mysql> insert into DemoTable values(101,'Chris',26); Query OK, 1 row affected (0.15 sec) mysql> insert into DemoTable values(102,'Robert',27); Query OK, 1 row affected (0.16 sec)
전체 레코드 조회
SELECT 문으로 테이블의 모든 레코드를 확인해 보겠습니다.
mysql> select * from DemoTable;
실행 결과는 다음과 같습니다.
+------------+--------------+-------------+ | CustomerId | CustomerName | CustomerAge | +------------+--------------+-------------+ | 101 | Chris | 26 | | 102 | Robert | 27 | +------------+--------------+-------------+ 2 rows in set (0.00 sec)
모든 열을 연결하는 최종 쿼리
이제 세 개의 열(CustomerId, CustomerName, CustomerAge)을 하나로 연결하는 쿼리를 실행해 보겠습니다.
mysql> select concat(CustomerId,CustomerName,CustomerAge) from DemoTable;
각 행의 값들이 공백 없이 하나의 문자열로 합쳐진 것을 확인할 수 있습니다.
+---------------------------------------------+ | concat(CustomerId,CustomerName,CustomerAge) | +---------------------------------------------+ | 101Chris26 | | 102Robert27 | +---------------------------------------------+ 2 rows in set (0.00 sec)
참고: 값 사이에 구분자 넣기
값이 붙어 있으면 가독성이 떨어질 수 있습니다. 이 경우 CONCAT_WS() 함수를 사용하면 첫 번째 인수로 지정한 구분자를 값들 사이에 자동으로 삽입할 수 있습니다.
mysql> select concat_ws('-', CustomerId, CustomerName, CustomerAge) from DemoTable;
-- 결과 예시: 101-Chris-26 / 102-Robert-27또한 CONCAT 함수는 인수 중 하나라도 NULL이면 전체 결과가 NULL이 되므로, NULL 처리가 필요하다면 IFNULL() 함수와 함께 사용하는 것이 좋습니다.