MySQL에서 OR 조건을 대체하는 REGEXP 방식
MySQL에서 여러 개의 OR 조건이 포함된 WHERE 절은 코드가 길어지고 가독성이 떨어질 수 있습니다. 이럴 때 유용한 대안이 바로 REGEXP(정규 표현식)입니다. REGEXP를 사용하면 복잡한 OR 조건을 하나의 패턴으로 간결하게 처리할 수 있습니다.
1. 테스트용 테이블 생성하기
먼저 예제에 사용할 테이블을 생성합니다.
mysql> create table DemoTable684(EmployeeInformation text); Query OK, 0 rows affected (0.68 sec)
2. 샘플 데이터 삽입하기
INSERT 명령어를 사용해 몇 개의 레코드를 추가합니다.
mysql> insert into DemoTable684 values('John 21 Google');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable684 values('Carol 23 Amazon');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable684 values('Carol 26 Flipkart');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable684 values('David 29 Microsoft');
Query OK, 1 row affected (0.18 sec)3. 전체 레코드 조회하기
SELECT 문으로 테이블의 모든 데이터를 확인합니다.
mysql> select *from DemoTable684;
실행 결과는 다음과 같습니다.
+---------------------+ | EmployeeInformation | +---------------------+ | John 21 Google | | Carol 23 Amazon | | Carol 26 Flipkart | | David 29 Microsoft | +---------------------+ 4 rows in set (0.00 sec)
4. REGEXP로 OR 조건 구현하기
아래 쿼리는 'David', '29', 'Microsoft' 중 하나라도 포함된 행을 찾는 조건입니다. 기존에 WHERE ... OR ... OR ... 형태로 작성해야 했던 조건을 정규 표현식 패턴 하나로 처리할 수 있습니다.
mysql> select *from DemoTable684 where EmployeeInformation REGEXP '(David|29|Microsoft)';
실행 결과는 다음과 같습니다.
+---------------------+ | EmployeeInformation | +---------------------+ | David 29 Microsoft | +---------------------+ 1 row in set (0.00 sec)
정리
REGEXP의 파이프(|) 기호는 '또는(OR)'을 의미하므로, 여러 키워드 중 하나라도 일치하는 행을 손쉽게 검색할 수 있습니다. 다만 REGEXP는 인덱스를 제대로 활용하지 못할 수 있으므로, 대량의 데이터를 다룰 때는 성능을 반드시 고려해야 합니다. 소규모 데이터나 간단한 패턴 매칭에는 REGEXP가 OR 조건보다 훨씬 깔끔하고 효율적인 선택이 될 수 있습니다.