SQL/MySQL

MySQL CONCAT과 || 유의점, 컬럼(필드) 문자열 합치기

진리뷰 2023. 8. 29. 09:00
반응형

 

 

MySQL-CONCAT-Double-Vertical-bars-유의점-컬럼-필드-문자열-합치기-썸네일
MySQL CONCAT 설명, 유의점, 사용법

 

 

 

이 글은 SQL의 CONCAT 설명, MySQL CONCAT과 ||의 유의점

그리고 컬럼(필드) 문자열 합치는 CONCAT 사용 방법을 예시와 함께 담고있습니다.

 

 

 

SQL CONCAT

 

SQL의 CONCAT은 컬럼(필드) 문자열들을 결합해서 하나의 열로 표현할 때 사용합니다.

이때 CONCAT은 연산자 ||(더블 버티컬 바, Double Vertical bars)로도 사용할 수 있습니다.

 

 

 

MySQL CONCAT과 || 유의점

 

문자열 결합 시, ||를 입력하는 게 훨씬 보기 좋고 편합니다.

하지만 안타깝게도... MySQL은 CONCAT을 사용해야 합니다.

보통 CONCAT을 ||로 많이 사용하지만, MySQL에서 ||는 'Logical OR(논리연산자 OR)'입니다.

SELECT 컬럼1, 컬럼2,..., 컬럼N
FROM 테이블명
WHERE 조건식1 OR 조건식2;
SELECT 컬럼1, 컬럼2,..., 컬럼N
FROM 테이블명
WHERE 조건식1 || 조건식2;

 

 

 

MySQL ||(Double Vertical bars) 유의점 예시

 

다른 DBMS에서 사용하는 것처럼, MySQL에 ||를 입력하면 다음과 같이 이상한 산출물이 나옵니다.

MySQL-CONCAT-Double-Vertical-bars-유의점-예시
MySQL Double Vertical bars 유의점

 

 

 

MySQL OR과 || 예시

 

WHERE 조건식인 dep_name='마케팅' OR gender='F'; 산출물(위),

dep_name='마케팅' || gender='F'; 산출물(아래)이 같음을 확인할 수 있습니다.

MySQL-OR-Double-Vertical-bars-예시
논리연산자 OR과 Double Vertical bars

 

 

 

MySQL CONCAT 컬럼(필드) 문자열 합치기

 

MySQL에서 CONCAT 사용 방법은 다음과 같습니다.

합치려는 컬럼들을 CONCAT 뒤 괄호 안에 쉼표와 함께 입력합니다.

SELECT CONCAT(컬럼1, 컬럼2)
FROM 테이블명;

 

 

하지만 위와 같이 입력하면, 문자열들이 띄어쓰기 없이 결합되어 보기 어렵습니다.

그래서 결합할 문자열들 간 띄어쓰기를 원한다면 아래와 같이 입력합니다.

SELECT CONCAT(컬럼1, ' ', 컬럼2)
FROM 테이블명;

 

 

 

CONCAT과 띄어쓰기 예시

 

띄어쓰기 없는 예시입니다.

SELECT CONCAT(staff_name, dep_name)
FROM clerk;

 

CONCAT-띄어쓰기-없음
CONCAT 띄어쓰기 없음 예시

 

 

띄어쓰기를 포함한 예시입니다.

SELECT CONCAT(staff_name, ' ', dep_name)
FROM clerk;

 

CONCAT-띄어쓰기-있음
CONCAT 띄어쓰기 예시

 

 


 

샘플 테이블 info_account입니다.

info_account
account_no gender age
12345 F 30
23415   42
45921 M 60
20312 M 51
26513 M 27
56941 F 33
92183   29

 

 

고객 분류 segment를 '성별(연령)' 형태로 분류 및 카운트

SELECT CONCAT(
               CASE WHEN LENGTH(gender) < 1 THEN '기타'
                          WHEN gender = 'F' THEN '여성'
                          WHEN gender = 'M' THEN '남성'
                          END
              , '('
              , CASE WHEN age <= 29 THEN '20대'
                          WHEN age <= 39 THEN '30대'
                          WHEN age <= 49 THEN '40대'
                          WHEN age >= 50 THEN '50대 이상'
                          END
              , ')'
              ) AS segment
              , COUNT(*) AS count
FROM info_account
GROUP BY segment
ORDER BY count DESC;

 

segment count
여성(30대) 2
남성(50대 이상) 2
기타(40대) 1
남성(20대) 1
기타(20대) 1

 

반응형
top