MySQL - 정규 표현식

안녕하세요, 데이터베이스 열정가 여러분! 오늘 우리는 MySQL 정규 표현식의 fascinatie 세계로 빠져들어갑니다. 기존에 코드를 작성해 본 적이 없어도 걱정 마세요 - 우리는 기본부터 시작하여 단계적으로 올라갈 것입니다. 이 튜토리얼의 끝을 맺을 때, 당신은 정규 표현식을 프로처럼 사용할 수 있을 것입니다!

MySQL - Regular Expressions

정규 표현식이란?

MySQL의 구체적인 내용에 이전하기 전에, 정규 표현식(정규 표현식, regex)이 무엇인지 이해해 보겠습니다. 당신이 히 кой의 텍스트에서 특정 패턴을 찾고 있다고 상상해 봅시다. 그때 regex가 유용하게 쓰입니다! 그것은 문자열에서 복잡한 패턴을 찾을 수 있는 초고속 검색 도구입니다.

MySQL 정규 표현식

MySQL에서는 REGEXP 연산자를 사용하여 정규 표현식을 다룹니다. LIKE 연산자와 유사하지만 훨씬 더 강력합니다.

기본 문법

기본 문법은 다음과 같습니다:

SELECT column_name(s)
FROM table_name
WHERE column_name REGEXP 'pattern';

다음은 몇 가지 예제입니다:

SELECT * FROM employees WHERE last_name REGEXP 'son';

이 쿼리는 last_name에 'son'이 포함된 모든 직원을 찾습니다. 예를 들어 Johnson, Wilson, 또는 Sonny와 같은 이름입니다.

대소문자 민감성

MySQL의 정규 표현식은 기본적으로 대소문자를 구분하지 않습니다. 대소문자 구분을 원하시면 BINARY 키워드를 사용하세요:

SELECT * FROM employees WHERE last_name REGEXP BINARY 'Smith';

이렇게 하면 'Smith'를 맞출 수 있지만 'smith'나 'SMITH'는 맞출 수 없습니다.

REGEXP와 사용되는 패턴

이제 REGEXP와 함께 사용되는 일반적인 패턴을 탐구해 보겠습니다. 이 패턴들을 "정규 표현식의 비밀 코드"라고 생각하면 됩니다 - 이를 알면 거의 모든 것을 찾을 수 있습니다!

^ ( caret ) - 문자열의 시작

caret 기호는 문자열의 시작에서 패턴을 맞춥니다.

SELECT * FROM products WHERE product_name REGEXP '^Apple';

이렇게 하면 'Apple'로 시작하는 모든 제품 이름을 찾습니다. 예를 들어 'Apple iPhone' 또는 'Apple MacBook'과 같은 이름입니다.

$ ( dollor ) - 문자열의 끝

달러 기호는 문자열의 끝에서 패턴을 맞춥니다.

SELECT * FROM products WHERE product_name REGEXP 'Pro$';

이렇게 하면 'Pro'로 끝나는 모든 제품을 찾습니다. 예를 들어 'MacBook Pro' 또는 'iPad Pro'와 같은 이름입니다.

. ( dot ) - 모든 단일 문자

점은 줄 바꿈을 제외한 모든 단일 문자를 맞춥니다.

SELECT * FROM words WHERE word REGEXP 'c.t';

이렇게 하면 'cat', 'cut', 또는 'c@t'과 같은 단어를 맞춥니다!

* ( asterisk ) - 이전 문자의 0개 이상 반복

별표는 이전 문자의 0개 이상을 반복합니다.

SELECT * FROM emails WHERE email REGEXP 'info.*@example.com';

이렇게 하면 '[email protected]', '[email protected]', 또는 '[email protected]'과 같은 이메일을 맞춥니다.

+ ( plus ) - 이전 문자의 1개 이상 반복

*와 유사하지만 적어도 1개의 반복을 요구합니다.

SELECT * FROM products WHERE product_name REGEXP 'iPad ?Pro+';

이렇게 하면 'iPad Pro', 'iPad Pro', 'iPad Pro' 등과 같은 이름을 맞춥니다.

? ( question mark ) - 이전 문자의 0개 또는 1개 반복

问号는 이전 문자를 선택 사항으로 만듭니다.

SELECT * FROM words WHERE word REGEXP 'colou?r';

이렇게 하면 'color'와 'colour' 모두를 맞춥니다.

[] ( square brackets ) - 문자 집합

괄호는 특정 문자 집합을 맞춥니다.

SELECT * FROM employees WHERE last_name REGEXP '[AEIOU]';

이렇게 하면 모든 자음을 포함한 last_name을 찾습니다.

[^] ( negated character set )

괄호 안에 캐릿을 추가하면 집합을 부정합니다.

SELECT * FROM products WHERE product_name REGEXP '[^0-9]';

이렇게 하면 숫자를 포함하지 않는 제품 이름을 찾습니다.

| ( pipe ) - 대체

파이프 기호는 논리 OR 연산자로 작동합니다.

SELECT * FROM animals WHERE species REGEXP 'cat|dog';

이렇게 하면 동물 테이블에서 모든 고양이와 개를 찾습니다.

정규 표현식 함수와 연산자

MySQL은 정규 표현식을 다루기 위한 여러 가지 함수와 연산자를 제공합니다. 이제 그것을 탐구해 보겠습니다:

Function/Operator Description
REGEXP 문자열을 정규 표현식에 맞춥니다
REGEXP_LIKE() 문자열이 정규 표현식 패턴에 맞으면 1을 반환하고 그렇지 않으면 0을 반환합니다
REGEXP_INSTR() 첫 번째 정규 표현식 일치의 시작 인덱스를 반환합니다
REGEXP_REPLACE() 정규 표현식 패턴에 맞는 부분을 치환합니다
REGEXP_SUBSTR() 정규 표현식 패턴에 맞는 부분을 반환합니다

다음은 몇 가지 예제입니다:

REGEXP_LIKE()

SELECT * FROM products WHERE REGEXP_LIKE(product_name, '^iPhone');

이렇게 하면 'iPhone'으로 시작하는 모든 제품을 찾습니다.

REGEXP_INSTR()

SELECT email, REGEXP_INSTR(email, '@') AS at_position
FROM users;

이렇게 하면 각 이메일 주소에서 '@' 기호의 위치를 반환합니다.

REGEXP_REPLACE()

SELECT REGEXP_REPLACE('Hello, World!', '[aeiou]', '*') AS vowels_replaced;

이렇게 하면 모든 모음을 별표로 치환하여 'Hll, W*rld!'를 반환합니다.

REGEXP_SUBSTR()

SELECT REGEXP_SUBSTR('[email protected]', '[^@]+') AS username;

이렇게 하면 이메일 주소의 사용자 이름 부분을 추출합니다.

결론

축하합니다! 지금까지 MySQL 정규 표현식의 강력한 세계로 첫 걸음을 내디디셨습니다. 연습이 완벽을 만듭니다. 자신만의 정규 표현식 패턴을 만들어 다양한 조합을 실험해 보세요.

여러분의 여정을 계속하면서, 정규 표현식은 데이터베이스 도구箱에서 스위스 아ーノ이와 같은 존재임을 발견하게 될 것입니다. 처음에는 조금 어렵게 느껴질 수 있지만, 한 번 익숙해지면 그 없이는 어떻게 했을지 궁금해질 것입니다!

행복한 코딩을 하시고, 여러분의 쿼리가 항상 원하는 결과를 반환하길 바랍니다!

Credits: Image by storyset