Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

SQL에서 2개 이상의 필드를 연결하는 방법: CONCAT()과 CONCAT_WS() 완벽 정리

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() 함수를 사용할 수 있습니다.