mysql concat group_concat functions with examples
이 자습서에서는 구문 및 실제 예제와 함께 Select 및 GROUP_CONCAT 함수와 함께 MySQL CONCAT을 사용하는 방법을 설명합니다.
CONCAT은 MySQL에서 지원하는 문자열 함수로 두 개 이상의 문자열을 결합하거나 결합하여 단일 값으로 반환합니다. CONCAT이라는 이름은 동사 연결에서 유래되었으며 이는 2 개 이상의 엔티티를 함께 결합하는 것을 의미합니다.
이 튜토리얼에서는 쿼리 예제와 MySQL에서 제공하는 CONCAT 함수의 다른 변형을 통해 CONCAT의 사용법을 배웁니다.
학습 내용 :
MySQL CONCAT 함수
통사론:
CONCAT 함수의 구문은 간단합니다. 결합해야하는 문자열의 쉼표로 구분 된 목록 만 포함합니다.
CONCAT(string1, string2, ------ stringN)
CONCAT 함수에서 예상하는 입력 및 출력 유형은 모두 문자열입니다. 숫자가 제공 되더라도 최종 출력은 문자열입니다.
예를 들면 :
#1) 입력 유형을 문자열로 사용합니다.
SELECT CONCAT('string1', 'string2'); //Output string1string2
#두) 숫자 / 부동 소수점 숫자로 입력합니다.
SELECT CONCAT(1,2); //Output 12 SELECT CONCAT(1.1234,2); //Output 1.12342
SELECT 문과 함께 CONCAT 사용
CONCAT은 SELECT 쿼리와 함께 가장 널리 사용되며 2 개 이상의 열 데이터를 단일 열로 결합 할 수 있습니다.
고전적인 예는 firstName 및 lastName 필드에 대해 별도의 열이있는 테이블이 있다고 가정 할 수 있습니다. 따라서 데이터를 표시하는 동안 firstName 및 lastName 대신 FullName을 표시하려는 경우를 가정 해보십시오. CONCAT을 사용하고 그에 따라 선택한 데이터를 표시 할 수 있습니다.
이것이 실제로 작동하는지 봅시다.
MP3 변환기에 최고의 무료 YouTube
먼저 ID, 이름, 성, 나이, 생년월일 및 부서 필드가있는 학생 테이블을 만듭니다.
CREATE TABLE student (id INT PRIMARY KEY, fname VARCHAR(100), lname VARCHAR(100), age INT, dob DATE, department VARCHAR(100));
테이블에 더미 데이터를 삽입하십시오.
INSERT INTO student values (1,'Darren', 'Still', 32, '1988-05-20', 'ENGINEERING'), (2,'Abhishek', 'Kumar', 28, '1992-05-20', 'ACCOUNTING'), (3,'Amit', 'Singh', 30, '1990-09-20', 'ENGINEERING'), (4,'Steven', 'Johnson', 40, '1980-05-21', 'HUMAN RESOURCES'), (5,'Kartik', 'Shamungam', 20, '2000-05-12', 'TRAINEE');
이제 이름과 성을 결합한 연결된 문자열로 전체 이름을 가져 오는 SELECT 쿼리를 작성합니다.
SELECT CONCAT(fname,lname) as fullName from student
//산출
fullName |
---|
대런 스틸 |
AbhishekKumar |
AmitSingh |
스티븐 존슨 |
카르 틱샤 문감 |
위의 출력에서 볼 수 있듯이 이름과 성 사이에 공백이 없어서 읽을 수 없습니다. CONCAT 함수를 업데이트하여 추가 공백 문자를 연결할 문자열로 추가하여 공백을 추가 할 수 있습니다.
SELECT CONCAT(fname, ' ', lname) as fullName from student
이렇게하면 각 항목에서 그 사이에 추가 공간이 생깁니다.
GROUP과 함께 CONCAT 사용
MySQL은 GROUP_CONCAT라는 또 다른 기능을 제공합니다.
CONCAT와 비슷하지만 CONCAT를 사용하여 열간에 값을 결합하는 방식이 다른 반면 GROUP_CONCAT 함수는 대부분 행간에 값을 연결하는 데 사용됩니다.
MySQL GROUP_CONCAT 구문
SELECT col1, col2, ..., colN GROUP_CONCAT ( (DISTINCT) col_name1 (ORDER BY clause) (SEPARATOR str_val) ) FROM table_name GROUP BY col_name2;
따라서 GROUP_CONCAT 함수에서 다음을 볼 수 있습니다.
- col_name : 연결하려는 열입니다. 값이 반복되지 않도록하는 선택적 DISTINCT 절이 있습니다.
- 주문: ORDER BY 절은 연결된 목록 내에서 순서를 지정하는 데 사용되며 선택 사항입니다.
- 분리 기호: 이것은 연결된 값 사이에 사용자 지정 구분 기호를 정의하는 데 사용할 수있는 선택적 절입니다. 기본적으로 쉼표 (,)는 구분 기호입니다.
MySQL GROUP_CONCAT 예
위의 Student 테이블 예제에서 다음을 원한다고 가정합니다. 연결된 부서 목록 찾기 .
SELECT GROUP_CONCAT(department) as departments FROM student //Output ENGINEERING,ACCOUNTING,ENGINEERING,HUMAN RESOURCES,TRAINEE
위의 쿼리에서
- 출력에는 부서 열에서 사용할 수있는 모든 부서의 쉼표로 구분 된 목록이 포함됩니다.
- 또한 반복되는 값 ( 예를 들면 ENGINEERING) DISTINCT 절을 지정하지 않았기 때문입니다.
DISTINCT 절을 사용하여 동일한 예를 시도해 보겠습니다.
SELECT GROUP_CONCAT(DISTINCT department) as departments FROM student //Output ACCOUNTING,ENGINEERING,HUMAN RESOURCES,TRAINEE
이것은 부서 열의 고유 값을 반환합니다.
이제 사용자 지정 구분 기호를‘|’및 ORDER BY 절로 추가하여 부서 이름이 오름차순으로 정렬되도록합니다.
SELECT GROUP_CONCAT(DISTINCT department separator ' | ') as departments FROM student //Output ACCOUNTING | ENGINEERING | HUMAN RESOURCES | TRAINEE
따라서 위의 쿼리에서
- 부서 이름은 오름차순으로 정렬됩니다.
- 반복되는 값은 반환되지 않습니다.
- 구분 기호가‘,’에서‘| ‘.
보자 각 부서의 학생들의 연결된 값을 나열하는 또 다른 예입니다.
한 부서의 2 명의 학생이 같은 이름을 가질 수 있으므로 여기서는 DISTINCT를 원하지 않습니다.
SELECT department, GROUP_CONCAT(fname ORDER BY fname ASC SEPARATOR ' | ') AS students FROM student GROUP BY department
// 출력
학과 | 재학생 |
---|---|
회계 | 아비 섹 |
공학 | Amit | 대런 |
인적 자원 | 스티븐 |
연습생 | Kartik |
CONCAT 및 GROUP_CONCAT 결합
위의 예에서 각 부서와 함께 이름 및 성의 CONCATENATED 값을 표시한다고 가정합니다.
이를 위해 GROUP_CONCAT 명령 내에서 CONCAT를 사용할 수 있습니다.
아래에서이 작업을 살펴 보겠습니다.
SELECT department, GROUP_CONCAT(CONCAT(fname, ' ', lname) order by fname asc SEPARATOR ' | ') as students from student group by department
//산출
학과 | 재학생 |
---|---|
회계 | 아비 섹 쿠마르 |
공학 | Amit Singh | 대런 스틸 |
인적 자원 | 스티븐 존슨 |
연습생 | 카르 틱 샤 문감 |
CONCAT로 NULL 값 처리
CONCAT은 String 인수를 예상하고 출력을 String으로 반환합니다.
CONCAT 함수에 대한 입력이 NULL이면 출력도 NULL이됩니다.
SELECT CONCAT('string1','string2', NULL); //Output NULL
NULL 값을 처리하기 위해 CONCAT 함수 내에서 ifNull 문을 사용하여 열의 NULL 값의 경우 기본값 또는 공백 값을 보장 할 수 있습니다.
위의 예와 같이 CONCAT에 2 개의 문자열과 1 개의 NULL 값이 있다고 가정합니다.
SELECT CONCAT('string1','string2', ifNull(NULL,'hello')); //Output string1string2hello
위 쿼리에서 NULL 값 (또는 NULL 일 수있는 열)을 둘러싼 ifNull 함수를 추가했습니다. NULL 일치가 성공하면 실제 열 값이 아닌 'hello'를 반환합니다.
따라서 출력에서 NULL 문자열에 대해 'hello'가 인쇄되는 것을 볼 수 있습니다.
자주 묻는 질문
Q # 1) MySQL에서 열을 병합하려면 어떻게해야합니까?
대답: MySQL은 하나 이상의 테이블에서 2 개 이상의 열을 결합하거나 병합하고 병합 된 값을 출력에 반환하는 CONCAT 함수를 제공합니다.
Q # 2) MySQL에서 언제 어디서 concat 메서드를 사용해야합니까?
대답: CONCAT 방법은 일반적으로 두 개 이상의 열을 결합하고 단일 열로 표시하려는 쿼리 결과의 표시에 사용됩니다.
예를 들면 이름과 성을 별도의 열로 포함하는 테이블이 있고이를 fullName이라는 단일 엔티티로 표시하려는 경우 CONCAT 함수를 사용하여 이름과 성 열의 값을 병합하고 함께 표시 할 수 있습니다. 단일 열로.
Q # 3) MySQL GROUP_CONCAT이란 무엇입니까?
대답: CONCAT과 마찬가지로 MySQL GROUP_CONCAT는 테이블에서 값을 연결하는데도 사용됩니다. 여기서 차이점은 CONCAT이 열간에 값을 결합하는 데 사용되는 반면 GROUP_CONCAT는 행간에 값을 결합하는 기능을 제공한다는 것입니다.
또한 GROUP_CONCAT 및 CONCAT를 결합하여 원하는 결과를 반환 할 수 있습니다.
GROUP_CONCAT는 일반적으로 행간에 값을 그룹화하거나 결합하려는 시나리오에서 사용됩니다. 예를 들면 – 제품 이름과 범주가있는 제품 테이블이 있고 주어진 범주에 대한 모든 제품을 쉼표로 구분 된 값으로 나열하려는 경우 GROUP_CONCAT를 사용할 수 있습니다.
질문:
SELECT categoryName, GROUP_CONCAT(itemName) AS itemList FROM products GROUP BY categoryName
Q # 4) CONCAT 명령을 사용하여 구분 기호를 지정하려면 어떻게해야합니까?
대답: CONCAT를 사용하면 분리 할 별도의 문자열로 구분 기호를 지정할 수 있습니다.
예를 들면 : 구분 기호로‘|’를 사용하려는 경우 CONCAT 명령에서 연결하려는 열 이름 사이에이 문자열을 지정할 수 있습니다.
SELECT CONCAT(fname, '| ', lname) as fullName from student
Q # 5) CONCAT 명령과 CONCAT_WS 명령의 차이점은 무엇입니까?
대답: CONCAT_WS는 MySQL에서 제공하는 CONCAT의 또 다른 변형으로, 사용자가 연결되는 열에 대한 구분 기호를 지정할 수 있습니다.
더 많은 수의 열을 병합하고 연결된 모든 열에 대해 동일한 구분 기호를 사용하려는 상황에서 CONCAT보다 선호됩니다.
예: fname, lname, address 필드가있는 student 테이블이 있다고 가정합니다.
이제이 세 필드를 모두 연결하고‘|’로 구분하려고합니다.
사용 CONCAT , 연결할 별도의 문자열로 구분 기호를 지정해야합니다.
SELECT CONCAT(fname, '|', lname, '|', address) as mergedColumn from student
와있는 동안 CONCAT_WS 구분 기호를 한 번만 지정하면됩니다.
SELECT CONCAT_WS('|', fname, lname, address) as mergedColumn from student
결론
이 튜토리얼에서는 MySQL CONCAT 함수와 그 사용법에 대해 배웠습니다. 이 함수는 일반적으로 다른 열에 대해 값을 병합하기위한 쿼리 결과를 표시 할 때 매우 유용합니다.
또한 CONCAT 함수의 두 가지 변형에 대해 배웠습니다. 하나는 CONCAT_WS를 사용하여 구분 기호로 연결하고 다른 하나는 MySQL GROUP_CONCAT 함수를 사용하여 행 값을 연결하는 것입니다.