DB

[MySQL] LIKE와 REGEXP 차이부터 고급 패턴 검색까지 완벽 정리

인생아 2025. 6. 26. 17:59
반응형

MySQL에서 문자열을 검색할 때, 조건에 맞는 문자열 패턴을 찾아야 할 일이 많습니다. 이때 가장 많이 사용하는 조건절이 바로 LIKE와 REGEXP입니다.

LIKE는 간단한 와일드카드 문자 검색에, REGEXP는 복잡한 정규표현식 검색에 사용됩니다.

✅ LIKE 연산자란?

LIKE 연산자는 문자열 컬럼에서 일정한 패턴을 포함하는 값을 찾을 때 사용됩니다.
두 가지 와일드카드를 사용합니다:

  • % : 0개 이상의 문자
  • _ : 정확히 1개의 문자
SELECT name
FROM users
WHERE name LIKE '김%';

🔍 설명: 이름이 ‘김’으로 시작하는 모든 사용자 조회

SELECT email
FROM users
WHERE email LIKE '%@gmail.com';

🔍 설명: 이메일이 @gmail.com으로 끝나는 사용자만 조회

반응형

🎯 실무 꿀팁

  • LIKE 'A%'는 인덱스를 활용할 수 있어 빠름
  • LIKE '%A%'는 앞에 와일드카드가 있어 인덱스를 타지 못함 → 느림

✅ REGEXP 연산자란?

REGEXP는 정규표현식(Regular Expression)을 이용한 고급 문자열 검색을 가능하게 해줍니다. 단순한 문자열이 아닌, 복잡한 패턴 매칭이 가능합니다.

SELECT name
FROM products
WHERE name REGEXP '^A|Z$';

🔍 설명: 이름이 A로 시작하거나 Z로 끝나는 상품만 조회

자주 쓰이는 REGEXP 패턴

패턴 설명
^ 문자열 시작
$ 문자열 끝
[abc] a 또는 b 또는 c
[a-z] a부터 z까지의 문자
. 임의의 1문자
* 앞 문자의 0개 이상 반복
+ 앞 문자의 1개 이상 반복
SELECT phone
FROM contacts
WHERE phone REGEXP '^010-[0-9]{4}-[0-9]{4}$';

🔍 설명: 정확히 010-**-** 형태의 전화번호만 검색

✅ LIKE vs REGEXP 비교

항목 LIKE REGEXP
사용 용도 간단한 패턴 검색 복잡한 정규표현식 검색 가능
성능 빠름 (조건에 따라 인덱스 사용 가능) 느림 (인덱스 사용 어려움)
유연성 제한적 (%, _만 사용) 매우 유연함 (정규표현식 지원)
복잡도 낮음 높음
 
반응형

✅ 실전 예제 더 보기

이메일 도메인이 특정 회사인 사용자 조회

SELECT name, email
FROM users
WHERE email LIKE '%@example.com';

이름이 숫자로 끝나는 사용자 찾기 (REGEXP)

SELECT name
FROM users
WHERE name REGEXP '[0-9]$';

이름이 ‘박’으로 시작하면서, 두 글자 이상인 사람 찾기

SELECT name
FROM users
WHERE name REGEXP '^박.{1,}';

특수문자 포함 여부 확인

SELECT comment
FROM posts
WHERE comment REGEXP '[!@#$%^&*()]';

🔍 악성 입력 필터링, 클린 데이터 추출에 유용한 예제입니다.

✅ 성능 최적화 팁

  • 가능한 경우 LIKE '값%' 패턴으로 인덱스를 활용하세요.
  • REGEXP는 유연하지만 느리므로, 빈번한 쿼리에는 문자열 전처리 + 별도 컬럼 분리 전략을 고려하세요.
  • MySQL 8.0 이상에서는 REGEXP_LIKE() 함수도 사용 가능 → 더 명확한 구문

✅ 공식 문서 참고

반응형