MySQL에서는 테이블에 이미 저장되어 있는 값들을 활용하여 특정 문장이나 텍스트 내에서 해당 단어들이 포함되어 있는지 확인할 수 있습니다. 이번 글에서는 LIKE 연산자와 CONCAT 함수를 조합하여 이를 구현하는 방법을 단계별로 살펴보겠습니다.
1. 테이블 생성
먼저 예제에 사용할 테이블을 생성합니다.
mysql> create table DemoTable1316 -> ( -> Value varchar(40) -> ); Query OK, 0 rows affected (0.47 sec)
2. 데이터 삽입
INSERT 명령을 사용해 몇 개의 레코드를 삽입합니다.
mysql> insert into DemoTable1316 values('MySQL');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable1316 values('Java');
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable1316 values('MongoDB');
Query OK, 1 row affected (0.21 sec)
mysql> insert into DemoTable1316 values('C++');
Query OK, 1 row affected (0.13 sec)3. 전체 레코드 조회
SELECT 문을 사용해 테이블의 모든 레코드를 확인합니다.
mysql> select *from DemoTable1316;
실행 결과는 다음과 같습니다. 이 단어들이 이후 텍스트에서 검색할 대상입니다.
+---------+ | Value | +---------+ | MySQL | | Java | | MongoDB | | C++ | +---------+ 4 rows in set (0.00 sec)
4. 텍스트에서 단어 검색하기
이제 "Deep Dive using Java is good for advanced knowledge, but not MySQL"이라는 문장에서 위 테이블에 있는 단어들을 찾아내는 쿼리입니다. 핵심은 CONCAT 함수로 각 단어 앞뒤에 와일드카드(%)를 붙여 LIKE 연산과 비교하는 것입니다.
mysql> select Value
-> from DemoTable1316
-> where ( 'Deep Dive using Java is good for advanced knowledge, but not MySQL') like concat('%',Value,'%');출력 결과
문장에 포함된 단어만 필터링되어 반환됩니다.
+-------+ | Value | +-------+ | MySQL | | Java | +-------+ 2 rows in set (0.05 sec)
동작 원리 정리
이 쿼리가 작동하는 방식은 다음과 같습니다.
- CONCAT('%', Value, '%'): 테이블의 각 단어 값 앞뒤에 % 와일드카드를 추가합니다. 예를 들어 'Java'는 '%Java%'가 됩니다.
- LIKE 연산자: 주어진 문장이 해당 패턴과 일치하는지 확인합니다. 즉, 문장 안에 그 단어가 존재하면 일치로 판단됩니다.
- WHERE 절: 일치하는 행만 결과로 반환하므로, 문장에 실제로 등장한 단어들(MySQL, Java)만 출력됩니다.
참고로 MongoDB와 C++은 해당 문장에 포함되어 있지 않기 때문에 결과에서 제외됩니다. 이 방법은 키워드 목록을 데이터베이스로 관리하면서 특정 텍스트에 어떤 키워드가 등장하는지 확인해야 하는 경우에 유용하게 활용할 수 있습니다.