MySQL에서 여러 값에 대해 부분 일치 검색을 수행하려면 정규 표현식(REGEXP)을 활용하는 것이 더욱 효율적입니다. LIKE 연산자는 패턴 매칭을, IN 연산자는 특정 값 목록과의 비교를 담당하는데, 두 기능을 하나의 조건으로 결합해야 할 때 REGEXP가 유용한 대안이 됩니다.
1. 테이블 생성하기
먼저 예제에 사용할 테이블을 생성하겠습니다.
mysql> create table DemoTable
-> (
-> Name varchar(30)
-> );
Query OK, 0 rows affected (0.62 sec)
2. 샘플 데이터 삽입하기
INSERT 명령을 사용하여 테이블에 몇 개의 레코드를 추가합니다.
mysql> insert into DemoTable values('John');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable values('Chris');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable values('Robert');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable values('David');
Query OK, 1 row affected (0.17 sec)3. 저장된 데이터 확인하기
SELECT 문으로 테이블의 모든 레코드를 조회합니다.
mysql> select *from DemoTable;
위 쿼리는 다음과 같은 결과를 출력합니다.
+--------+
| Name |
+--------+
| John |
| Chris |
| Robert |
| David |
+--------+
4 rows in set (0.00 sec)
4. REGEXP로 LIKE와 IN 조건 대체하기
이제 REGEXP를 사용하여 LIKE와 IN의 기능을 하나의 쿼리로 구현하는 방법을 살펴보겠습니다. 파이프(|) 기호로 여러 검색어를 구분하면, 해당 문자열이 포함된 모든 행을 한 번에 조회할 수 있습니다.
mysql> select *from DemoTable where Name REGEXP 'John|Robert|David';
실행 결과는 다음과 같습니다.
+--------+
| Name |
+--------+
| John |
| Robert |
| David |
+--------+
3 rows in set (0.11 sec)
결과에서 확인할 수 있듯이, 'John', 'Robert', 'David' 세 개의 이름만 반환되고 'Chris'는 제외되었습니다. 이처럼 REGEXP를 사용하면 복잡한 OR 조건이나 다중 LIKE 절 없이도 간결하고 가독성 높은 쿼리를 작성할 수 있습니다.