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

MySQL SELECT 문에서 정규식(REGEXP)으로 패턴 매칭하는 방법

MySQL SELECT 문에서 정규식 일치가 가능할까요?

네, 가능합니다. MySQL에서는 REGEXP 연산자를 사용하면 SELECT 문 안에서 정규식 기반의 패턴 매칭을 수행할 수 있습니다. REGEXP는 단순한 부분 일치만 지원하는 LIKE와 달리, 문자열의 시작·끝 조건, 반복, 문자 집합 등 훨씬 강력하고 유연한 검색 기능을 제공합니다.

기본 문법

select yourColumnName from yourTableName where yourColumnName regexp '^yourValue';

여기서 ^ 기호는 "문자열의 시작"을 의미합니다. 따라서 '^Jo'는 'Jo'로 시작하는 모든 값과 일치하게 됩니다.

예제로 살펴보기

1. 테이블 생성

먼저 예제에 사용할 테이블을 생성합니다.

mysql> create table DemoTable1892
    (
    FirstName varchar(20)
    );
Query OK, 0 rows affected (0.00 sec)

2. 데이터 삽입

insert 명령어를 이용해 여러 개의 레코드를 추가합니다.

mysql> insert into DemoTable1892 values('John');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1892 values('Adam');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1892 values('Jace');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1892 values('Johny');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1892 values('Johnson');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1892 values('Jack');
Query OK, 1 row affected (0.00 sec)

3. 전체 데이터 확인

select 문으로 테이블의 모든 레코드를 조회해 보겠습니다.

mysql> select * from DemoTable1892;

실행 결과는 다음과 같습니다.

+-----------+
| FirstName |
+-----------+
| John      |
| Adam      |
| Jace      |
| Johny     |
| Johnson   |
| Jack      |
+-----------+
6 rows in set (0.00 sec)

4. 정규식을 활용한 조회 쿼리

이제 'Jo'로 시작하는 이름만 정규식으로 조회해 보겠습니다.

mysql> select FirstName from DemoTable1892 where FirstName regexp '^Jo';

실행 결과는 다음과 같습니다.

+-----------+
| FirstName |
+-----------+
| John      |
| Johny     |
| Johnson   |
+-----------+
3 rows in set (0.00 sec)

결과를 보면 John, Johny, Johnson처럼 'Jo'로 시작하는 3개의 레코드만 반환된 것을 확인할 수 있습니다. Adam, Jace, Jack은 패턴에 해당하지 않아 제외되었습니다.

자주 사용되는 정규식 기호

REGEXP와 함께 활용하면 좋은 주요 정규식 기호는 다음과 같습니다.

  • ^ : 문자열의 시작과 일치 (예: '^Jo' → Jo로 시작)
  • $ : 문자열의 끝과 일치 (예: 'son$' → son으로 끝남)
  • . : 임의의 한 문자와 일치
  • [...] : 대괄호 안의 문자 중 하나와 일치 (예: '^[JA]' → J 또는 A로 시작)
  • * : 바로 앞 문자가 0회 이상 반복됨을 의미

이처럼 MySQL의 REGEXP 연산자를 활용하면 복잡한 조건의 문자열 검색도 간단한 쿼리 하나로 처리할 수 있습니다.