MySQL에서 이름처럼 분리되어 저장된 여러 개의 열 값을 하나의 열로 합쳐서 조회해야 하는 경우가 자주 있습니다. 이럴 때 CONCAT() 함수를 사용하면 간단하게 해결할 수 있습니다. 이 글에서는 실제 예제를 통해 여러 열을 하나의 문자열로 결합하고, 별칭(alias)을 지정한 뒤 정렬까지 적용하는 방법을 단계별로 살펴보겠습니다.
1. 테이블 생성하기
먼저 예제에 사용할 테이블을 생성합니다. FirstName(이름)과 LastName(성) 두 개의 열을 가진 간단한 테이블입니다.
mysql> create table DemoTable
-> (
-> FirstName varchar(30),
-> LastName varchar(30)
-> );
Query OK, 0 rows affected (0.49 sec)
2. 샘플 데이터 삽입하기
INSERT 명령을 사용하여 테이블에 레코드를 추가합니다.
mysql> insert into DemoTable values('Chris','Brown');
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable values('Adam','Smith');
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable values('Carol','Taylor');
Query OK, 1 row affected (0.15 sec)3. 전체 데이터 확인하기
SELECT 문을 사용하여 테이블에 저장된 모든 레코드를 조회해 보겠습니다.
mysql> select *from DemoTable;
출력 결과
+-----------+----------+
| FirstName | LastName |
+-----------+----------+
| Chris | Brown |
| Adam | Smith |
| Carol | Taylor |
+-----------+----------+
3 rows in set (0.00 sec)
4. CONCAT()으로 여러 열을 하나의 열로 표시하기
다음은 CONCAT() 함수를 사용하여 FirstName과 LastName 두 열을 공백으로 구분해 하나의 값으로 결합하고, 'concatValue'라는 별칭을 부여한 뒤 내림차순으로 정렬하는 쿼리입니다.
mysql> select concat(FirstName,' ',LastName) as concatValue from DemoTable order by
concatValue DESC;
출력 결과
+--------------+
| concatValue |
+--------------+
| Chris Brown |
| Carol Taylor |
| Adam Smith |
+--------------+
3 rows in set (0.00 sec)
추가 팁: CONCAT_WS()와 NULL 처리
여러 열을 구분자로 연결할 때는 CONCAT_WS()(Concat With Separator) 함수를 사용하는 것도 좋은 방법입니다. 첫 번째 인수로 구분자를 지정하므로 코드가 더 깔끔해집니다.
mysql> select concat_ws(' ', FirstName, LastName) as fullName from DemoTable;또한 CONCAT() 함수는 인수 중 하나라도 NULL이면 결과 전체가 NULL이 되므로, NULL이 포함될 가능성이 있는 열은 IFNULL() 또는 COALESCE() 함수로 감싸 처리하는 것이 안전합니다.
mysql> select concat(IFNULL(FirstName,''), ' ', IFNULL(LastName,'')) as fullName from DemoTable;
정리
MySQL에서 여러 열을 하나의 열로 표시하려면 CONCAT() 함수를 사용하면 됩니다. AS 키워드로 별칭을 지정하면 결과 열의 이름을 원하는 대로 정할 수 있고, ORDER BY 절과 함께 사용하면 결합된 값 기준으로 정렬할 수도 있습니다. 데이터에 NULL이 있을 수 있다면 CONCAT_WS()나 IFNULL()을 함께 활용하는 것이 좋습니다.