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

MySQL CONCAT()과 CONCAT_WS() 함수의 차이점 완벽 정리

MySQL에서 CONCAT() 함수와 CONCAT_WS() 함수는 모두 두 개 이상의 문자열을 하나로 연결하는 데 사용됩니다. 이름이 비슷해서 혼동하기 쉽지만, 두 함수 사이에는 실무에서 반드시 알아야 할 중요한 차이점이 있습니다.

CONCAT()과 CONCAT_WS()의 주요 차이점

가장 기본적인 차이는 구분자(separator)의 유무입니다. CONCAT_WS() 함수는 문자열 사이에 지정한 구분자를 삽입하면서 연결할 수 있지만, CONCAT() 함수에는 구분자라는 개념 자체가 없습니다. 참고로 CONCAT_WS에서 'WS'는 'With Separator(구분자 포함)'를 의미합니다.

또 다른 핵심 차이점은 NULL 처리 방식입니다. CONCAT() 함수는 인수 중 하나라도 NULL이면 전체 결과로 NULL을 반환하는 반면, CONCAT_WS() 함수는 오직 구분자 자체가 NULL일 때만 NULL을 반환합니다. 즉, 연결 대상 문자열에 NULL이 포함되어 있어도 CONCAT_WS()는 해당 값을 건너뛰고 나머지 문자열을 정상적으로 연결해 줍니다.

예제로 확인하기

아래 예제를 통해 두 함수의 동작 차이를 직접 확인해 보겠습니다.

mysql> Select CONCAT('Ram','is','a','good','student') AS 'CONCAT() 함수 예제';

+---------------------+
| CONCAT() 함수 예제  |
+---------------------+
| Ramisagoodstudent   |
+---------------------+

1 row in set (0.00 sec)

mysql> Select CONCAT_WS(' ','Ram','is','a','good','student') AS 'CONCAT_WS() 함수 예제';

+-------------------------+
| CONCAT_WS() 함수 예제  |
+-------------------------+
| Ram is a good student   |
+-------------------------+

1 row in set (0.00 sec)

결과 분석

첫 번째 쿼리에서 CONCAT() 함수는 각 단어 사이에 아무런 구분 없이 문자열을 그대로 이어 붙여 "Ramisagoodstudent"라는 결과를 반환했습니다. 읽기 어려운 결과물이 나온 것이죠.

반면 두 번째 쿼리에서 CONCAT_WS() 함수는 첫 번째 인수인 공백(' ')을 구분자로 사용하여 각 단어 사이에 공백을 삽입했고, 그 결과 훨씬 자연스러운 "Ram is a good student"라는 문자열을 얻을 수 있었습니다.

두 함수 비교 요약

구분CONCAT()CONCAT_WS()
구분자 사용불가능가능 (첫 번째 인수로 지정)
NULL 반환 조건인수 중 하나라도 NULL이면구분자가 NULL일 때만
문자열 중 NULL 포함 시전체 결과가 NULLNULL 값은 건너뛰고 연결

정리하면, 단순히 문자열을 붙이는 작업이라면 CONCAT()으로 충분하지만, 공백이나 쉼표 같은 구분자가 필요하거나 NULL 값이 섞여 있을 가능성이 있는 데이터를 다룬다면 CONCAT_WS()를 사용하는 것이 훨씬 안전하고 편리합니다.