MySQL에서 쿼리 결과를 CSV(쉼표로 구분된 값) 형식으로 출력하려면 CONCAT_WS() 함수를 사용하면 됩니다. CONCAT_WS는 'Concatenate With Separator'의 약자로, 여러 문자열을 지정한 구분자로 연결해주는 유용한 함수입니다.
CONCAT_WS() 기본 문법
SELECT CONCAT_WS(',', 컬럼명1, 컬럼명2, 컬럼명3, ....N) AS 별칭 FROM 테이블명;첫 번째 인자에는 구분자(여기서는 쉼표 ',')를 지정하고, 이후 연결하고 싶은 컬럼들을 나열합니다. 문법을 더 쉽게 이해하기 위해 실제 예제 테이블을 만들어 보겠습니다.
예제 테이블 생성
먼저 학생 정보를 저장할 테이블을 생성하는 쿼리입니다.
mysql> create table CSVFormatOutputs
-> (
-> StudentId int not null auto_increment,
-> StudentName varchar(20),
-> StudentAge int,
-> PRIMARY KEY(StudentId)
-> );
Query OK, 0 rows affected (1.15 sec)데이터 삽입
INSERT 명령을 사용해 몇 개의 레코드를 추가합니다.
mysql> insert into CSVFormatOutputs(StudentName,StudentAge) values('Mike',23);
Query OK, 1 row affected (0.26 sec)
mysql> insert into CSVFormatOutputs(StudentName,StudentAge) values('John',26);
Query OK, 1 row affected (0.19 sec)
mysql> insert into CSVFormatOutputs(StudentName,StudentAge) values('Sam',19);
Query OK, 1 row affected (0.20 sec)
mysql> insert into CSVFormatOutputs(StudentName,StudentAge) values('Carol',27);
Query OK, 1 row affected (0.59 sec)
mysql> insert into CSVFormatOutputs(StudentName,StudentAge) values('Bob',24);
Query OK, 1 row affected (0.15 sec)저장된 데이터 확인
SELECT 문으로 테이블의 모든 레코드를 조회해 보겠습니다.
mysql> select *from CSVFormatOutputs;
실행 결과는 다음과 같습니다.
+-----------+-------------+------------+ | StudentId | StudentName | StudentAge | +-----------+-------------+------------+ | 1 | Mike | 23 | | 2 | John | 26 | | 3 | Sam | 19 | | 4 | Carol | 27 | | 5 | Bob | 24 | +-----------+-------------+------------+ 5 rows in set (0.00 sec)
CONCAT_WS()로 CSV 형식 출력하기
이제 CONCAT_WS() 함수를 사용해 각 행의 데이터를 쉼표로 구분된 하나의 문자열로 출력해 보겠습니다.
mysql> select concat_ws(',',StudentId,StudentName,StudentAge) as CSVFormat from CSVFormatOutputs;실행 결과, 각 레코드가 CSV 형식으로 깔끔하게 출력되는 것을 확인할 수 있습니다.
+------------+ | CSVFormat | +------------+ | 1,Mike,23 | | 2,John,26 | | 3,Sam,19 | | 4,Carol,27 | | 5,Bob,24 | +------------+ 5 rows in set (0.00 sec)
참고 사항
CONCAT_WS() 함수의 장점 중 하나는 NULL 값을 자동으로 무시한다는 점입니다. 일반 CONCAT() 함수는 인자 중 하나라도 NULL이면 전체 결과가 NULL이 되지만, CONCAT_WS()는 NULL인 컬럼을 건너뛰고 나머지 값들만 구분자로 연결해 줍니다. 따라서 데이터에 NULL이 포함될 가능성이 있는 경우 CSV 형식 변환 시 CONCAT_WS()를 사용하는 것이 훨씬 안전합니다.