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

단일 MySQL 쿼리에서 'LIKE'와 'IN' 조건을 동시에 구현하는 방법

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 절 없이도 간결하고 가독성 높은 쿼리를 작성할 수 있습니다.