SQL에서 2개 이상의 필드를 연결하는 방법
SQL 작업 중에는 두 개 이상의 필드(컬럼) 값을 하나의 문자열로 합쳐야 하는 경우가 자주 발생합니다. 예를 들어 ID, 이름, 나이, 점수를 한 줄로 표시하거나 특정 구분자로 묶어 출력해야 할 때 유용합니다. MySQL에서는 CONCAT() 함수 또는 CONCAT_WS() 함수를 사용하면 손쉽게 해결할 수 있습니다.
기본 문법
먼저 CONCAT() 함수를 사용하는 방법입니다. 구분자를 포함하려면 각 컬럼 사이에 직접 문자열로 삽입해야 합니다.
SELECT CONCAT(yourColumnName1,'/',yourColumnName2,'/',yourColumnName3,'/',......N) AS anyVariableName FROM yourTableName;
다음은 CONCAT_WS() 함수를 사용하는 방법입니다.
SELECT CONCAT_WS('/',yourColumnName1,yourColumnName2,.....N) AS anyVariableName FROM yourTableName;두 함수의 가장 큰 차이는 구분자 처리 방식입니다. CONCAT()은 구분자를 일일이 직접 넣어야 하지만, CONCAT_WS()는 첫 번째 인자로 지정한 구분자를 나머지 값들 사이에 자동으로 삽입해 줍니다. 또한 CONCAT_WS()는 값 중에 NULL이 있을 경우 해당 값을 건너뛰고 연결해 주는 장점도 있습니다.
예제 테이블 생성
문법을 실제로 확인해 보기 위해 테이블을 먼저 만들어 보겠습니다. 테이블 생성 쿼리는 다음과 같습니다.
mysql> create table MoreThan2ColumnConcat
-> (
-> Id int,
-> Name varchar(20),
-> Age int,
-> Marks int
-> );
Query OK, 0 rows affected (2.59 sec)
샘플 데이터 입력
INSERT 명령을 사용해 테이블에 레코드를 몇 개 추가합니다.
mysql> insert into MoreThan2ColumnConcat values(1,'John',24,89);
Query OK, 1 row affected (0.17 sec)
mysql> insert into MoreThan2ColumnConcat values(11,'Larry',25,90);
Query OK, 1 row affected (0.21 sec)
mysql> insert into MoreThan2ColumnConcat values(15,'Mike',26,79);
Query OK, 1 row affected (0.13 sec)
mysql> insert into MoreThan2ColumnConcat values(16,'Sam',21,99);
Query OK, 1 row affected (0.14 sec)
입력된 데이터 확인
SELECT 문으로 테이블의 모든 레코드를 조회해 보겠습니다.
mysql> select *from MoreThan2ColumnConcat;
실행 결과는 다음과 같습니다.
+------+-------+------+-------+
| Id | Name | Age | Marks |
+------+-------+------+-------+
| 1 | John | 24 | 89 |
| 11 | Larry | 25 | 90 |
| 15 | Mike | 26 | 79 |
| 16 | Sam | 21 | 99 |
+------+-------+------+-------+
4 rows in set (0.00 sec)
CONCAT()으로 2개 이상의 필드 연결하기
CONCAT() 함수를 사용해 네 개의 필드를 '/' 구분자와 함께 연결하는 쿼리입니다.
mysql> select concat(Id,'/',Name, '/',Age, '/',Marks) as ConcatMoreFields from MoreThan2ColumnConcat;
실행 결과는 다음과 같습니다.
+------------------+
| ConcatMoreFields |
+------------------+
| 1/John/24/89 |
| 11/Larry/25/90 |
| 15/Mike/26/79 |
| 16/Sam/21/99 |
+------------------+
4 rows in set (0.00 sec)
CONCAT_WS()으로 2개 이상의 필드 연결하기
이번에는 CONCAT_WS() 함수로 동일한 작업을 수행해 보겠습니다. 구분자를 한 번만 지정하면 되기 때문에 쿼리가 훨씬 간결해집니다.
mysql> select concat_ws('/',Id,Name,Age,Marks) as ConcatMoreFields from MoreThan2ColumnConcat;실행 결과는 다음과 같습니다.
+------------------+
| ConcatMoreFields |
+------------------+
| 1/John/24/89 |
| 11/Larry/25/90 |
| 15/Mike/26/79 |
| 16/Sam/21/99 |
+------------------+
4 rows in set (0.00 sec)
마무리
정리하면, SQL에서 두 개 이상의 필드를 연결할 때는 CONCAT() 또는 CONCAT_WS() 함수를 사용하면 됩니다. 구분자가 필요하다면 코드가 간결하고 NULL 처리에도 유리한 CONCAT_WS()를 사용하는 것이 좋습니다. 참고로 DBMS에 따라 방식이 다른데, Oracle에서는 '||' 연산자, SQL Server에서는 '+' 연산자 또는 CONCAT() 함수를 사용할 수 있습니다.