VillageSQL is a drop-in replacement for MySQL with extensions.
All examples on this page work on VillageSQL. Install Now →
LIKE는 2개의 문자로 형태를 설명합니다. REGEXP는 패턴 언어 전체로 형태를 설명하므로, LIKE가 표현할 수 없는 것을 요구할 수 있습니다: 여러 대안 중 하나, 반복되는 그룹, 문자 범위입니다.
시작하기 전에 mysql -u root -p sakila로 클라이언트를 여세요.
REGEXP의 동작 방식
PATTERN_TEXT를 찾을 정규식으로 바꾸세요.
조건은 패턴이 값 안의 어디에서든 일치하면 참입니다. 그것이 값 전체를 설명해야 하는 LIKE와의 첫 번째 차이입니다.
아래에서 사용하는 조각들:
예제
- 다음으로 시작
^가 없으면 패턴은 제목 안의 어디에 있는 ACA와도 일치합니다.
- 다음으로 끝남
- 2가지 시작 중 하나
ALBERT가 두 번 나오는 것은 2명의 배우가 같은 이름을 쓰기 때문입니다. SELECT는 고유한 값이 아니라 행을 보고합니다.
- LIKE가 설명할 수 없는 형태
이 쿼리는 A나 B로 시작하고 S로 끝나는 제목을 요구합니다.
- 일치하지 않는 모든 것
NOT REGEXP는 NOT LIKE와 같은 방식으로 검사를 뒤집습니다.
REGEXP에도 NOT REGEXP에도 일치하지 않는데, 둘 다 NULL에 대해 NULL을 반환하기 때문입니다. IS NULL이 그것을 다룹니다.
RLIKE는 같은 연산자입니다
RLIKE와 REGEXP는 하나의 연산자를 쓰는 2가지 표기입니다. 하나를 골라서 계속 쓰세요.
대소문자 구분, 그리고 그것을 강제하는 방법
패턴은LIKE와 마찬가지로 일치시키는 대상의 콜레이션을 따릅니다. 따라서 기본적으로 소문자 패턴이 대문자 텍스트와 일치합니다. REGEXP_LIKE()는 이 연산자의 함수 형태이고, 세 번째 인수가 그것을 재정의합니다: 'c'는 대소문자 구분을 뜻합니다.
LIKE로 표현할 수 있으면 LIKE를 쓰세요
어떤 인덱스도REGEXP 검색의 범위를 좁힐 수 없는데, 일치가 어디에서든 시작할 수 있어서 서버가 모든 값을 검사하기 때문입니다. 고정된 텍스트로 시작하는 패턴을 쓴 LIKE는 인덱스에서 일치하는 부분으로 곧바로 건너뛸 수 있습니다. 둘 다 필터를 표현할 수 있을 때는 LIKE가 둘 중 더 저렴합니다. LIKE 레슨이 어떤 패턴이 인덱스를 쓸 수 있고 어떤 패턴이 쓸 수 없는지 설명합니다.
요약
- 값 안의 어디에서든 패턴을 일치시키려면
REGEXP를 쓰세요. - 일치가 시작이나 끝에 있어야 할 때는
^와$로 고정하세요. RLIKE는REGEXP의 다른 이름으로 읽으세요.- 대소문자를 구분하는 일치를 강제하려면
REGEXP_LIKE(value, pattern, 'c')를 쓰세요. - 먼저
LIKE를 쓰세요. 어떤 인덱스도REGEXP검색의 범위를 좁힐 수 없기 때문입니다.
함께 보기
- LIKE — 더 단순한 패턴 연산자
- 대소문자 구분 — 기본 동작을 결정하는 것
- WHERE — 패턴이 들어가는 절
- MySQL의 전문 검색 — 대규모 텍스트에서 단어 검색하기
- MySQL의 퍼지 문자열 매칭 — 같지는 않지만 비슷한 텍스트 일치시키기