LIKE 연산자와 CONCAT() 함수로 문자열 내 단어 포함 여부 확인하기
MySQL에서 문자열 안에 특정 단어가 포함되어 있는지 확인하려면 LIKE 연산자와 CONCAT() 함수를 함께 사용하면 됩니다. 이번 글에서는 실제 예제를 통해 단계별로 살펴보겠습니다.
1. 테이블 생성하기
먼저 예제에 사용할 테이블을 생성합니다.
mysql> create table DemoTable
(
Value text
);
Query OK, 0 rows affected (0.63 sec)
2. 샘플 데이터 삽입하기
INSERT 명령을 사용하여 테이블에 레코드를 추가합니다.
mysql> insert into DemoTable values('MySQL');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable values('Is');
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable values('Relational');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable values('Database');
Query OK, 1 row affected (0.13 sec)3. 저장된 데이터 조회하기
SELECT 문을 사용하여 테이블의 모든 레코드를 확인합니다.
mysql> select *from DemoTable;
위 쿼리는 다음과 같은 결과를 출력합니다.
+------------+
| Value |
+------------+
| MySQL |
| Is |
| Relational |
| Database |
+------------+
4 rows in set (0.00 sec)
4. 단어 포함 여부 확인 쿼리 실행하기
다음은 컬럼 값에 특정 단어가 포함되어 있는지 확인하는 쿼리입니다.
참고: 아래 예제는 컬럼 값이 단일 단어인 경우를 보여줍니다. 하지만 동일한 방식은 전체 문장이나 긴 문자열에서 특정 단어만 찾아야 할 때도 그대로 적용할 수 있습니다.
mysql> select Value from DemoTable where 'Relational' LIKE concat('%',Value,'%');실행 결과는 다음과 같습니다.
+------------+
| Value |
+------------+
| Relational |
+------------+
1 row in set (0.00 sec)
동작 원리 정리
이 쿼리의 핵심은 concat('%', Value, '%')입니다. 검색 대상 문자열 앞뒤에 와일드카드(%)를 붙여, 해당 컬럼 값이 문자열 어디에든 등장하는지 판단합니다. 위 예제에서는 'Relational'이라는 문자열에 'Relational'이라는 단어가 포함되어 있으므로 해당 행만 결과로 반환됩니다.
추가로, 대소문자 구분 없이 검색하고 싶다면 LOWER() 함수를 활용해 양쪽 값을 소문자로 변환한 후 비교하거나, MySQL의 기본 콜레이션(예: utf8mb4_general_ci)이 대소문자를 구분하지 않도록 설정되어 있는지 확인하면 됩니다.