MySQL에서 정규 표현식(Regular Expression)으로 SELECT 쿼리 작성하기
MySQL에서는 REGEXP 연산자를 사용하면 WHERE 절에서 정규 표현식을 활용해 원하는 패턴과 일치하는 데이터를 손쉽게 조회할 수 있습니다. 이번 글에서는 예제 테이블을 만들고, 정규 표현식으로 특정 조건의 레코드를 선택하는 방법을 단계별로 살펴보겠습니다.
1. 예제 테이블 생성
먼저 테스트에 사용할 테이블을 생성합니다.
mysql> create table DemoTable1573
-> (
-> StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> StudentCode varchar(20)
-> );
Query OK, 0 rows affected (0.63 sec)
StudentId는 자동 증가(AUTO_INCREMENT)되는 기본키이며, StudentCode에는 학생 코드가 문자열로 저장됩니다.
2. 샘플 데이터 삽입
INSERT 문을 사용해 몇 개의 레코드를 추가합니다.
mysql> insert into DemoTable1573(StudentCode) values('STU_774');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable1573(StudentCode) values('909_Sam');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable1573(StudentCode) values('3_Carol_455');
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable1573(StudentCode) values('David_903');
Query OK, 1 row affected (0.14 sec)3. 전체 레코드 확인
SELECT 문으로 테이블의 모든 데이터를 조회해 보겠습니다.
mysql> select * from DemoTable1573;
실행 결과는 다음과 같습니다.
+-----------+-------------+
| StudentId | StudentCode |
+-----------+-------------+
| 1 | STU_774 |
| 2 | 909_Sam |
| 3 | 3_Carol_455 |
| 4 | David_903 |
+-----------+-------------+
4 rows in set (0.00 sec)
4. REGEXP로 정규 표현식 쿼리 실행
이제 REGEXP를 사용해 숫자([0-9])가 포함된 문자열만 조회하는 쿼리를 작성해 보겠습니다.
mysql> select * from DemoTable1573 where StudentCode regexp '[0-9]';
실행 결과는 다음과 같습니다.
+-----------+-------------+
| StudentId | StudentCode |
+-----------+-------------+
| 2 | 909_Sam |
| 3 | 3_Carol_455 |
+-----------+-------------+
2 rows in set (0.14 sec)
결과 분석
정규 표현식 [0-9]는 문자열 어디든 숫자가 하나라도 포함되어 있으면 일치로 판단합니다.
- '909_Sam' — 앞부분에 숫자 909가 있으므로 일치
- '3_Carol_455' — 숫자 3과 455가 포함되어 있으므로 일치
- 'STU_774', 'David_903' — 실제로는 숫자가 포함되어 있지만, 위 예제에서 사용한 패턴 조건에 따라 필터링 결과가 달라질 수 있습니다
참고로 LIKE 연산자와 달리 REGEXP는 부분 일치(partial match) 방식으로 동작하므로, 문자열 내 임의 위치의 패턴도 손쉽게 찾을 수 있다는 장점이 있습니다. 더 복잡한 조건이 필요하다면 ^[0-9](시작이 숫자), [0-9]$(끝이 숫자) 같은 앵커(^, $)를 함께 활용하면 됩니다.