개인 공부 공간/SQL

[MySQL] LIKE와 REGEXP

Hoon Kang 2021. 12. 10. 00:06

평소 특정한 문자열에 대한 검색을 할 때 LIKE가 사용하기 편하다는 이유로 REGEXP는 이용해본 경험이 거의 없다. 하지만 REGEXP 정규표현식을 활용하여 LIKE 보다 조금 더 복잡한 문자열 조건을 부여할 수 있기 때문에 이번 포스트에서는 LIKEREGEXP 대해 모두 정리해보려고 한다.

LIKE

LIKEWHERE절 안에 사용되며 문자열 내에서 조회하고 싶은 문자열을 찾는 함수이며 WILDCARDS(와일드 카드) 문자들과 함께 사용된다.
MySQL의 LIKE에서 사용되는 와일드 카드 문자는 다음과 같다.

  1. %: 0개 이상의 문자를 대신 표현
  2. _(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를 포함하지 않는 문자열을 찾음

References