MySQL에서 키워드 검색을 구현하는 방법
MySQL에서 특정 키워드가 포함된 데이터를 검색하려면 LIKE 연산자를 사용하는 것이 가장 일반적인 방법입니다. LIKE 연산자는 와일드카드 문자인 %(임의의 문자열)와 함께 사용되어, 컬럼 값에 특정 키워드가 포함되어 있는지 확인할 수 있습니다.
기본 문법
SELECT * FROM yourTableName WHERE yourColumnName LIKE '%키워드명%' OR yourColumnName LIKE '%다른키워드%';
여러 개의 키워드를 동시에 검색하려면 위와 같이 OR 조건을 연결하여 사용합니다.
예제로 배우는 키워드 검색
실제 동작을 이해하기 위해 먼저 테스트용 테이블을 생성해 보겠습니다.
1. 테이블 생성
mysql> CREATE TABLE KeywordSearchDemo
-> (
-> StudentId INT,
-> StudentName VARCHAR(100)
-> );
Query OK, 0 rows affected (0.86 sec)2. 데이터 삽입
INSERT 명령어를 사용하여 샘플 레코드를 추가합니다.
mysql> INSERT INTO KeywordSearchDemo VALUES(100,'Adam John'); Query OK, 1 row affected (0.40 sec) mysql> INSERT INTO KeywordSearchDemo VALUES(101,'John Smith'); Query OK, 1 row affected (0.17 sec) mysql> INSERT INTO KeywordSearchDemo VALUES(103,'John Taylor'); Query OK, 1 row affected (0.15 sec) mysql> INSERT INTO KeywordSearchDemo VALUES(104,'Carol Taylor'); Query OK, 1 row affected (0.21 sec) mysql> INSERT INTO KeywordSearchDemo VALUES(105,'Maria Garcia'); Query OK, 1 row affected (0.20 sec) mysql> INSERT INTO KeywordSearchDemo VALUES(106,'James Smith'); Query OK, 1 row affected (0.12 sec) mysql> INSERT INTO KeywordSearchDemo VALUES(110,'Mike Brown'); Query OK, 1 row affected (0.22 sec)
3. 전체 데이터 확인
SELECT 문으로 테이블의 모든 레코드를 조회합니다.
mysql> SELECT * FROM KeywordSearchDemo;
실행 결과는 다음과 같습니다.
+-----------+--------------+ | StudentId | StudentName | +-----------+--------------+ | 100 | Adam John | | 101 | John Smith | | 103 | John Taylor | | 104 | Carol Taylor | | 105 | Maria Garcia | | 106 | James Smith | | 110 | Mike Brown | +-----------+--------------+ 7 rows in set (0.00 sec)
특정 키워드로 검색하기
이제 'John' 또는 'Taylor'라는 키워드가 이름에 포함된 학생만 조회하는 쿼리를 실행해 보겠습니다.
mysql> SELECT StudentName FROM KeywordSearchDemo
-> WHERE StudentName LIKE '%John%' OR StudentName LIKE '%Taylor%';'John'과 'Taylor' 키워드가 포함된 레코드만 출력됩니다.
+--------------+ | StudentName | +--------------+ | Adam John | | John Smith | | John Taylor | | Carol Taylor | +--------------+ 4 rows in set (0.10 sec)
StudentId 컬럼까지 함께 조회하기
SELECT 절에 컬럼을 추가하거나 *를 사용하면 학번(StudentId)까지 함께 반환받을 수 있습니다.
mysql> SELECT * FROM KeywordSearchDemo
-> WHERE StudentName LIKE '%John%' OR StudentName LIKE '%Taylor%';실행 결과는 다음과 같습니다.
+-----------+--------------+ | StudentId | StudentName | +-----------+--------------+ | 100 | Adam John | | 101 | John Smith | | 103 | John Taylor | | 104 | Carol Taylor | +-----------+--------------+ 4 rows in set (0.00 sec)
추가 팁: 성능 최적화
LIKE 연산자는 간단하지만, 데이터 양이 많아지면 인덱스를 활용하지 못해 검색 속도가 느려질 수 있습니다. 대량의 텍스트 데이터에서 빠른 키워드 검색이 필요하다면 다음 방법을 고려해 보세요.
- FULLTEXT 인덱스:
MATCH ... AGAINST구문과 함께 사용하면 자연어 기반의 빠른 전문 검색이 가능합니다. - REGEXP 연산자: 정규표현식 패턴 매칭이 필요한 복잡한 검색 조건에 유용합니다.
소규모 프로젝트나 간단한 조건 검색에는 LIKE 연산자만으로도 충분히 효율적입니다.