반응형
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() 함수도 사용 가능 → 더 명확한 구문
✅ 공식 문서 참고
반응형
'DB' 카테고리의 다른 글
[MySQL] SELECT 쿼리를 VIEW로 추상화 (복잡한 SQL을 깔끔하게 관리) (1) | 2025.06.30 |
---|---|
[MySQL] LOCK IN SHARE MODE 완전 정복 – 공유잠금, 읽기전용 (0) | 2025.06.30 |
[MySQL] SELECT FOR UPDATE 완벽 가이드 – 동시성 제어의 핵심 키워드 (0) | 2025.06.30 |
[MySQL] JSON 컬럼 SELECT 조회 완벽 가이드 (0) | 2025.06.26 |
[MySQL] IS NULL과 IS NOT NULL 완전 정복! 조건절로 놓치지 말아야 할 핵심 포인트 (2) | 2025.06.26 |
[MySQL] SELECT 문에서 EXISTS와 IN 조건절 (1) | 2025.06.26 |
[MySQL] SELECT + 서브쿼리 활용법 (쿼리 안에 쿼리) (0) | 2025.06.26 |
[MySQL] SELECT JOIN 완벽 정리 – INNER JOIN, LEFT JOIN, RIGHT JOIN 차이와 실전 예제 (0) | 2025.06.25 |