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

MySQL에서 문자열 내 정확한 단어 검색하기 – REGEXP 활용법

정확한 단어 검색을 위한 기본 구문

MySQL에서 문자열 안에 포함된 정확한 단어를 검색하려면 REGEXP 연산자와 함께 아래와 같은 구문을 사용하면 됩니다.

select *from yourTableName
where
yourColumnName regexp '(^|[[:space:]])yourWord([[:space:]]|$)';

이 정규 표현식은 검색 대상 단어가 문자열의 시작(^), 공백([[:space:]])으로 구분되거나 문자열의 끝($)에 위치하는 경우에만 일치시킵니다. 덕분에 "MySQL"을 검색할 때 "MySQLTutorial"처럼 해당 단어가 다른 단어의 일부로 포함된 경우는 자동으로 제외됩니다.

예제 테이블 생성

먼저 실습에 사용할 테이블을 생성해 보겠습니다.

mysql> create table DemoTable
    (
    Title text
    );
Query OK, 0 rows affected (0.23 sec)

데이터 삽입

insert 명령을 사용하여 테이블에 몇 개의 레코드를 추가합니다.

mysql> insert into DemoTable values('This is the Introduction to Java');
Query OK, 1 row affected (0.05 sec)

mysql> insert into DemoTable values('This is the Introduction to MongoDB');
Query OK, 1 row affected (0.07 sec)

mysql> insert into DemoTable values('This is the Introduction to MySQL');
Query OK, 1 row affected (0.06 sec)

전체 레코드 확인

select 문으로 테이블의 모든 레코드를 조회해 보겠습니다.

mysql> select *from DemoTable;

위 쿼리는 다음과 같은 결과를 출력합니다.

+-------------------------------------+
| Title                                |
+-------------------------------------+
| This is the Introduction to Java    |
| This is the Introduction to MongoDB |
| This is the Introduction to MySQL   |
+-------------------------------------+
3 rows in set (0.00 sec)

정확한 단어 검색 쿼리 실행

이제 문자열에서 정확한 단어 "MySQL"을 검색하는 쿼리는 다음과 같습니다.

mysql> select *from DemoTable
where
Title regexp '(^|[[:space:]])MySQL([[:space:]]|$)';

실행 결과는 다음과 같습니다.

+-----------------------------------+
| Title                             |
+-----------------------------------+
| This is the Introduction to MySQL |
+-----------------------------------+
1 row in set (0.13 sec)

결과를 보면 "MySQL"이라는 단어가 독립적인 단어로 포함된 레코드만 정확히 반환된 것을 확인할 수 있습니다. 단순 부분 문자열 매칭인 LIKE '%MySQL%'과 달리, REGEXP 방식은 단어 경계를 기준으로 검색하기 때문에 "MySQLWorkbench" 같은 단어가 데이터에 포함되어 있어도 원치 않는 결과가 섞이지 않습니다. 따라서 정확한 단어 단위 검색이 필요한 경우 REGEXP 패턴 매칭이 가장 확실한 선택입니다.