Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL에서 테이블에 저장된 단어로 특정 텍스트 검색하기

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++은 해당 문장에 포함되어 있지 않기 때문에 결과에서 제외됩니다. 이 방법은 키워드 목록을 데이터베이스로 관리하면서 특정 텍스트에 어떤 키워드가 등장하는지 확인해야 하는 경우에 유용하게 활용할 수 있습니다.