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

MySQL REGEXP 연산자로 정규 표현식 기반 데이터 조회하기

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]$(끝이 숫자) 같은 앵커(^, $)를 함께 활용하면 됩니다.