MySQL/BasicGrammer

[MySQL] REGEXP 정규표현식 정리, LIKE IN 같이 사용

hanshow113 2022. 1. 8. 19:15
SELECT CITY
FROM STATION
WHERE Country LIKE "a%"
OR Country LIKE "e%";
-- Country가 a나 e로 시작하는 것을 조회


SELECT CITY
FROM STATION
WHERE Country REGEXP '^a|^e';

 

REGEXP 정리

* 코드를 짧게 작성할 수 있지만, 인덱싱을 적용 중이지 않다면 LIKE 보다 속도가 느린 단점이 있음.

 

1. Matching

기호 기능 예시 설명
. 문자 하나 "...." 문자열 4글자 이상인 것 찾음
| (수직선) | 로 구분된 문자열 찾기 "하나|둘" "하나" or "둘" 에 해당하는 문자열 찾음
[] [] 안에 나열된 패턴 문자열 찾음 "[123]셋" '1셋' or.'2셋' or '3셋'
^ 시작하는 문자열 찾음 '^넷' '넷'으로 시작되는 문자열 찾음 (넷플릭스, 넷마블)
$ 끝나는 문자열 찾음 '넷$" '넷'으로 끝나는 문자열 찾음 (인터넷, 이더넷)

⌾ REGEXP에서 논리연산자 AND를 사용하기 위해서는 필요한 정규표현식 n개를 AND로 이어서 사용해야 함.

SELECT CITY
FROM STATION
WHERE CITY REGEXP "^[aeiou]"
AND CITY REGEXP "[aeiou]$";

-- CITY명의 첫 글자와 마지막 글자에 모음(a,e,i,o,u)가 동시에 포함되는 데이터 조회

 

 

2. Numbers Limit

기호 기능 예시 설명
* 0회 이상 나타나는 문자 "a*" 'a'가 0번 이상 등장하는 문자열 'a','aa', 'b'
+ 1회 이상 나타나는 문자 '장+' '장'이 1번 이상 등장하는 문자열 '장', '간장', '간장공장', '장장장'
문자{m, n} m회 이상, n회 이하 반복되는 문자 '장{1, 2}' '장' 1회 이상, 2회 이하 문자열 '장', '장장', '간장공장'
? 0~1회 나타나는문자 '장?' '장'이 0~1회 '장', '장장', '간장'

3. String Group

기호 기능 예시 설명
[A-z] or [:alpha:] or \a 영어 문자열 찾음 "^[A-z]" 영어로 시작하는 문자열 찾음
[0-9] or [:digit:] or \d 숫자 문자열 찾음 "[0-9]+" 한 개 이상의 숫자가 등장하는 문자열 찾음

4. Not

기호 기능 예시 설명
[^문자] [] 안의 문자를 포함하지 않는 문자열 찾음 '[^장]' '장'을 포함하지 않는 문자열 찾음
- '간장', '장', '간장공장' 모두 제외됨