MySQL CONCAT() 함수와 와일드카드 문자의 조합
와일드카드(Wildcard)는 복잡한 조건에 일치하는 데이터를 검색할 때 유용하게 사용되는 특수 문자입니다. 일반적으로 와일드카드는 LIKE 또는 NOT LIKE 비교 연산자와 함께 사용됩니다.
MySQL에서는 CONCAT() 함수의 결과로 생성된 문자열에 대해서도 와일드카드 문자와 LIKE 또는 NOT LIKE 연산자를 조합하여 데이터를 매칭할 수 있습니다. 즉, 여러 컬럼을 하나로 합친 문자열을 기준으로 패턴 검색을 수행할 수 있다는 의미입니다.
아래 예제에서는 'student' 테이블의 Name과 Last_name 컬럼을 CONCAT() 함수로 결합한 뒤, 와일드카드를 활용해 데이터를 조회해 보겠습니다.
LIKE 연산자를 사용한 예제
mysql> Select CONCAT(Name,' ', Last_name) AS NAME from student Where CONCAT(Name, ' ',Last_Name) LIKE '%Kumar%';
+---------------+
| NAME |
+---------------+
| Gaurav Kumar |
| Harshit Kumar |
+---------------+
2 rows in set (0.00 sec)
위 쿼리는 이름과 성을 공백으로 연결한 문자열 중 '%Kumar%' 패턴과 일치하는 행만 반환합니다. 결과적으로 성이 Kumar인 학생 두 명이 출력되었습니다.
NOT LIKE 연산자를 사용한 예제
mysql> Select CONCAT(Name,' ', Last_name) AS NAME from student Where concat(Name, ' ',Last_Name) NOT LIKE '%Kumar%';
+----------------+
| NAME |
+----------------+
| Aarav Sharma |
| Gaurav Rathore |
| Yashraj Singh |
+----------------+
3 rows in set (0.00 sec)
반대로 이 쿼리는 '%Kumar%' 패턴과 일치하지 않는 행들을 반환하여, 나머지 세 명의 학생이 출력된 것을 확인할 수 있습니다.
정리
두 결과 집합을 비교해 보면 알 수 있듯이, CONCAT() 함수의 출력값에도 WHERE 절 내에서 와일드카드 문자(%)와 LIKE / NOT LIKE 연산자를 자유롭게 적용할 수 있습니다. 이러한 방식은 여러 개의 컬럼을 하나의 문자열로 합쳐 통합 검색 조건을 만들고자 할 때 특히 유용합니다.