개인 공부 공간/SQL
[MySQL] LIKE와 REGEXP
Hoon Kang
2021. 12. 10. 00:06
평소 특정한 문자열에 대한 검색을 할 때 LIKE
가 사용하기 편하다는 이유로 REGEXP
는 이용해본 경험이 거의 없다. 하지만 REGEXP
정규표현식을 활용하여 LIKE
보다 조금 더 복잡한 문자열 조건을 부여할 수 있기 때문에 이번 포스트에서는 LIKE
와 REGEXP
대해 모두 정리해보려고 한다.
LIKE
LIKE
는 WHERE
절 안에 사용되며 문자열 내에서 조회하고 싶은 문자열을 찾는 함수이며 WILDCARDS(와일드 카드) 문자들과 함께 사용된다.
MySQL의 LIKE
에서 사용되는 와일드 카드 문자는 다음과 같다.
- %: 0개 이상의 문자를 대신 표현
- _(under bar): 1개의 문자를 표현
이에 대해 구체적인 예시를 보면 다음과 같다.
% 사용
# %ab: 앞 부분과 상관 없이 맨 마지막이 ab로 끝나는 문자열을 표현
SELECT *
FROM table
WHERE col LIKE '%ab'
# ab%: 뒷 부분과 상관 없이 ab로 시작하는 문자열을 표현
SELECT *
FROM table
WHERE col LIKE 'ab%'
# %ab%: ab를 포함하고 있는 모든 문자열을 표현
SELECT *
FROM table
WHERE col LIKE '%ab%'
_(under bar) 사용
# _ab: 2, 3번째 문자열은 a, b로 고정된 문자열을 표현(1번째 문자열은 모든 문자열 가능)
SELECT *
FROM table
WHERE col LIKE '_ab'
# a_b_: 1, 3번째 문자열은 a,b 로 고정된 문자열을 표현(2, 4번째 문자열은 모든 문자열 가능)
SELECT *
FROM table
WHERE col LIKE 'a_b_'
REGEXP
REGEXP
는 MySQL에서 정규 표현식을 활용하는 문법이다.
정규 표현식의 위키백과 정의는 다음과 같다.
정규 표현식은 특정한 규칙을 가진 문자열의 집합을 표현하는 데 사용하는 형식 언어이다.
정규 표현식을 이용해 특정한 규칙에 따라 문자열을 찾는 방식들은 매우 다양하다. 이 중 자주 쓰이는 패턴들은 다음과 같다.
매칭
문법 | 설명 | 예시 |
---|---|---|
. | 문자 1개 | "..." 문자열의 길이가 세 글자 이상인 것을 찾음 |
| | OR의 개념 | "a|b" a 또는 b에 해당하는 문자열을 찾음 |
^ | 시작하는 문자열 | "^ab" ab로 시작하는 문자열을 찾음 |
$ | 끝나는 문자열 | "cd$" cd로 끝나는 문자열을 찾음 |
[] | [] 안에 나열된 패턴에 해당하는 문자열을 찾음 | "[abc]d" ad 또는 bd 또는 cd 인 문자열을 찾음 |
수의 제한
문법 | 설명 | 예시 |
---|---|---|
* | 0회 이상 | "a*" a가 0회 이상 등장하는 문자열을 찾음 |
+ | 1회 이상 | "b+" b가 1회 이상 등장하는 문자열을 찾음 |
{m,n} | m회 이상 & n회 이하 반복 | "c{1,4}" c가 1회 이상 4회 이하 반복하는 문자열을 찾음 |
? | 0~1회 | "d?" d가 0~1회 등장하는 문자열을 찾음 |
문자 그룹
문법 | 설명 | 예시 |
---|---|---|
[A-z] | 알파벳 대문자 또는 소문자 | "[A-z]+" 알파벳이 한 개 이상인 문자열을 찾음 |
[0-9] | 숫자인 문자열 | "^[0-9]+" 한 개 이상의 숫자로 시작하는 문자열을 찾음 |
부정
문법 | 설명 | 예시 |
---|---|---|
[^문자] | 괄호 안 문자를 포함하지 않음 | "[^abc]" a 또는 b 또는 c를 포함하지 않는 문자열을 찾음 |