MySQL - RLIKE 연산자

안녕하세요, 데이터베이스 열정가 여러분! 오늘 우리는 MySQL의 RLIKE 연산자의 세계로 흥미로운 여정을 떠납니다. 여러분의 친절한 이웃 컴퓨터 과학 교사로서, 저는 많은 예제와 설명을 통해 이 주제를 안내해 드리겠습니다. 그러니 가상의 메모지를 손에 들고, 함께 빠져보겠습니다!

MySQL - RLIKE Operator

MySQL RLIKE 연산자

RLIKE는 무엇인가요?

RLIKE는 MySQL에서 정규 표현식을 사용하여 패턴 일치를 수행할 수 있는 강력한 연산자입니다. 지금 당신이 떠오르는 것을 알고 있습니다 - "정규 표현식? 그것은 무서워 보이네!" 하지만 걱정 마세요, 우리는 단계별로 설명해 나갈 테니까요.

RLIKE를 초능력을 가진 검색 도구로 생각해 보세요. 데이터베이스에서 복잡한 패턴을 기반으로 정보를 찾을 수 있는 탐정처럼입니다. 멋지죠?

기본 문법

RLIKE 연산자의 기본 문법은 다음과 같습니다:

expr RLIKE pattern

여기서 expr은 검색할 표현식(보통은 열 이름)이고, pattern은 일치시키고자 하는 정규 표현식입니다.

간단한 예제로 시작해 보겠습니다:

SELECT * FROM customers WHERE last_name RLIKE 'son$';

이 쿼리는 last_name이 'son'으로 끝나는 모든 고객을 찾습니다. 패턴 안의 $ 기호는 "문자열의 끝"을 의미합니다. 따라서 Johnson, Wilson, 또는 Anderson과 같은 이름을 일치시킬 것입니다.

RLIKE와 사용되는 패턴

이제 RLIKE에서 사용할 수 있는 일반적인 패턴을 살펴보겠습니다. 이 패턴들은 데이터베이스 탐정이 미스터리를 풀기 위해 사용하는 비밀 코드라고 생각해 보세요!

패턴 설명 예제
^ 문자열의 시작과 일치 '^A'는 'Apple'과 일치하지만 'Banana'와는 일치하지 않음
$ 문자열의 끝과 일치 'e$'는 'Apple'과 일치하지만 'Banana'와는 일치하지 않음
. 모든 단일 문자와 일치 'b.t'는 'bat', 'bit', 'but' 등과 일치
* 전체 문자의 0번 이상의 발생 횟수와 일치 'go*gle'는 'ggle', 'google', 'gooogle' 등과 일치
+ 전체 문자의 1번 이상의 발생 횟수와 일치 'go+gle'는 'google', 'gooogle'과 일치하지만 'ggle'과는 일치하지 않음
[] 브래켓 안의 모든 단일 문자와 일치 '[aeiou]'는 모든 모음과 일치
[^] 브래켓 안에 없는 모든 단일 문자와 일치 '[^0-9]'는 모든 숫자가 아닌 문자와 일치

이제 이 패턴들을 사용해 보겠습니다!

SELECT * FROM products WHERE name RLIKE '^A.*e$';

이 쿼리는 이름이 'A'로 시작하고 'e'로 끝나는 모든 제품을 찾습니다. 중간의 .*은 "0번 이상의 모든 문자"를 의미합니다. 따라서 "Apple", "Airplane", 또는 단순히 "Ae"와 같은 이름을 일치시킬 것입니다.

문자열에 대한 RLIKE

RLIKE는 테이블에서 검색하는 것뿐만 아니라 문자열에 직접 사용할 수도 있습니다! 이는 패턴을 쿼리에 사용하기 전에 테스트하는 데 유용합니다.

SELECT 'MySQL' RLIKE 'SQL$';

이 문법은 'MySQL'이 'SQL'로 끝나는지 확인하여 1(true)을 반환합니다.

이 次는 재미있는 예제입니다:

SELECT 'Mississippi' RLIKE 's+is+';

이 문법은 'Mississippi'에 's'가 1번 이상 나오고 그 뒤에 'i'가 나오고 또 다시 's'가 1번 이상 나오는지 확인하여 1을 반환합니다. 즉, 단어 중간에 'ssis'를 일치시킨 것입니다.

RLIKE 연산자를 클라이언트 프로그램에서 사용하기

이제 더 복잡한 시나리오에서 RLIKE를 어떻게 사용할 수 있는지 살펴보겠습니다. 가정해 보겠습니다. 이메일 주소 테이블이 있고, Gmail 주소를 모두 찾고 싶다면 어떻게 할까요? 다음과 같이 할 수 있습니다:

SELECT * FROM users WHERE email RLIKE '^[A-Za-z0-9._%+-]+@gmail\\.com$';

와우, 이 것은 복잡해 보이네요! 그러면 하나씩 풀어보겠습니다:

  • ^ : 문자열의 시작
  • [A-Za-z0-9._%+-]+ : 이메일 주소에 허용된 문자, 숫자, 또는 특수 문자 1개 이상
  • @ : @ 기호
  • gmail\\.com : 문자 그대로 "gmail.com" (점은 특수 문자이므로 백슬래시로 이스케이프)
  • $ : 문자열의 끝

이 패턴은 표준 Gmail 주소와 일치합니다.

제 교육 경험에서 이야기하자면: 제가 한 번은 학생이 AOL 이메일 주소를 데이터베이스에서 찾으려고 했을 때, 그는 수천 개의 항목을 수동으로 확인하고 있었습니다. 제가 RLIKE를 사용하는 방법을 보여주었을 때, 그는 기쁨에 몸을 뛰었습니다!

연습 시간!

이제 재미있는 연습 문제로 마무리하겠습니다. (XXX) XXX-XXXX 형식의 전화번호를 찾는 RLIKE 패턴을 작성할 수 있나요? 도전해 보세요, 그리고 아래의 답변을 확인해 보세요!

SELECT * FROM contacts WHERE phone RLIKE '^\\\([0-9]{3}\\\) [0-9]{3}-[0-9]{4}$';

이 패턴은 다음과 일치합니다:

  • ^\\\( : 열린 괄호로 시작 (이스케이프 두 번 because it's special in both regex and MySQL)
  • [0-9]{3} : 정확히 세 자리 숫자
  • \\\) : 닫힌 괄호
  • ` ` : 공백
  • [0-9]{3} : 세 자리 숫자
  • - : 하이픈
  • [0-9]{4} : 네 자리 숫자
  • $ : 문자열의 끝

그리고

이제 RLIKE의 힘을 가지셨습니다! 초능력을 잘 사용하세요. 즐거운 쿼리 작성을 기원합니다, 미래의 데이터베이스 마법사 여러분!

Credits: Image by storyset