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