2 분 소요

SQL에서는 특정 조건에 맞는 데이터를 문자 패턴 기반으로 검색할 수 있는 패턴 매칭 기능을 제공합니다. 이때 사용되는 대표적인 연산자는 LIKEREGEXP입니다. 이 글에서는 두 연산자의 문법, 사용법, 차이점, 실전 예제까지 자세히 정리하였습니다.


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}

질문 정리

  1. LIKE와 REGEXP는 언제 사용하나요?
    • 단순 문자 검색LIKE, 복잡한 조건 검색REGEXP가 적합합니다.
  2. REGEXP에서 숫자 패턴도 검색 가능한가요?
    • 가능합니다. [0-9], {n} 등을 조합해 숫자 패턴을 검색할 수 있습니다.
  3. LIKE에서 와일드카드를 피하고 싶을 땐?
    • 일반적인 등호(=) 비교나 ESCAPE 키워드를 사용해 이스케이프 처리할 수 있습니다.
  4. REGEXP는 대소문자 구분하나요?
    • MySQL에서는 기본적으로 대소문자를 구분하지 않습니다. 설정에 따라 달라질 수 있습니다.
  5. 패턴 매칭이 느려지는 경우는 언제인가요?
    • 인덱스를 무시하고 전체 문자열을 검색할 경우 성능이 저하될 수 있습니다.

카테고리:

업데이트:

댓글남기기