SQL에서는 특정 조건에 맞는 데이터를 문자 패턴 기반으로 검색할 수 있는 패턴 매칭 기능을 제공합니다. 이때 사용되는 대표적인 연산자는 LIKE와 REGEXP입니다. 이 글에서는 두 연산자의 문법, 사용법, 차이점, 실전 예제까지 자세히 정리하였습니다.
1. 패턴 매칭 연산자 종류
| 연산자 |
설명 |
특징 |
LIKE |
간단한 패턴 검색 |
와일드카드 %(여러 문자), _(한 문자) 사용 |
REGEXP |
정규 표현식 기반 복잡한 검색 |
유연한 문자열 조건 지정 가능 |
2. LIKE 연산자 사용법
문법
SELECT * FROM 테이블명 WHERE 컬럼명 LIKE '패턴';
와일드카드
%: 0개 이상의 임의의 문자
_: 정확히 1개의 임의의 문자
예제
1. 특정 문자로 시작
SELECT * FROM Reservation WHERE Name LIKE '김%';
-- '김'으로 시작하는 모든 이름
2. 특정 문자로 시작하지 않는 경우
SELECT * FROM Reservation WHERE Name NOT LIKE '김%';
3. 특정 형식(숫자 자리수 포함)
SELECT * FROM Reservation WHERE RoomNum LIKE '20__';
-- '20'으로 시작하고 뒤에 두 자리 숫자
3. REGEXP 연산자 사용법
문법
SELECT * FROM 테이블명 WHERE 컬럼명 REGEXP '정규표현식';
주요 정규 표현식 패턴
| 패턴 |
의미 |
. |
임의의 한 문자 |
* |
앞 문자 0회 이상 반복 |
+ |
앞 문자 1회 이상 반복 |
^ |
문자열의 시작 |
$ |
문자열의 끝 |
[abc] |
a, b, c 중 하나 |
[^abc] |
a, b, c를 제외한 문자 |
{n} |
정확히 n번 반복 |
{m,n} |
m~n번 반복 |
예제
1. 시작 또는 끝 일치
SELECT * FROM Reservation WHERE Name REGEXP '^홍|산$';
-- '홍'으로 시작하거나 '산'으로 끝나는 이름
2. 숫자 패턴 확인
SELECT * FROM Reservation WHERE RoomNum REGEXP '^20[0-9]{2}$';
-- '20'으로 시작하고 뒤에 두 자리 숫자
3. NOT REGEXP
SELECT * FROM Reservation WHERE Name NOT REGEXP '^홍|산$';
-- '홍'으로 시작하지 않고, '산'으로 끝나지 않는 이름
4. LIKE vs REGEXP 비교
| 비교 항목 |
LIKE |
REGEXP |
| 사용 난이도 |
쉬움 |
다소 복잡 |
| 와일드카드 |
% (여러 문자), _ (한 문자) |
다양한 정규 표현식 지원 |
| 조건 다양성 |
단순 문자열 위치 지정 |
복잡한 패턴, 반복, 문자 집합 등 |
비교 예시
| 조건 |
LIKE 예제 |
REGEXP 예제 |
| ‘홍’으로 시작 |
LIKE '홍%' |
REGEXP '^홍' |
| ‘산’으로 끝남 |
LIKE '%산' |
REGEXP '산$' |
| 세 자리 수 ‘20__’ |
LIKE '20__' |
REGEXP '^20[0-9]{2}$' |
5. 실전 예제 모음
5.1. 이름 조건
SELECT * FROM Customer WHERE Name REGEXP '^김|희$';
-- '김'으로 시작하거나 '희'로 끝나는 이름
5.2. 숫자 패턴 검색
SELECT * FROM Reservation WHERE RoomNum LIKE '10%';
-- '10'으로 시작하는 모든 RoomNum
SELECT * FROM Reservation WHERE RoomNum REGEXP '^10[0-9]{1,3}$';
-- '10'으로 시작하고 1~3자리 숫자
5.3. 특정 위치 문자열
SELECT * FROM Customer WHERE Address REGEXP '서울$';
-- Address가 '서울'로 끝남
6. 요약 정리표
| 연산자 |
설명 |
사용 예시 |
LIKE |
단순 패턴 매칭 |
'홍%', '20__' |
REGEXP |
정규 표현식을 통한 고급 패턴 검색 |
'^홍', '산$', [0-9]{2} |
질문 정리
- LIKE와 REGEXP는 언제 사용하나요?
- 단순 문자 검색은
LIKE, 복잡한 조건 검색은 REGEXP가 적합합니다.
- REGEXP에서 숫자 패턴도 검색 가능한가요?
- 가능합니다.
[0-9], {n} 등을 조합해 숫자 패턴을 검색할 수 있습니다.
- LIKE에서 와일드카드를 피하고 싶을 땐?
- 일반적인 등호(
=) 비교나 ESCAPE 키워드를 사용해 이스케이프 처리할 수 있습니다.
- REGEXP는 대소문자 구분하나요?
- MySQL에서는 기본적으로 대소문자를 구분하지 않습니다. 설정에 따라 달라질 수 있습니다.
- 패턴 매칭이 느려지는 경우는 언제인가요?
- 인덱스를 무시하고 전체 문자열을 검색할 경우 성능이 저하될 수 있습니다.
댓글남기기