TIL

👀Today I Learn

1. MySQL에서 정규표현식 사용 방법

  • MySQL에서 정규표현식을 사용할 때는 REGEXP 연산자를 사용
  • MySQL 8.0부터는 RLIKE 연산자도 동일한 기능을 수행

기본 구문

SELECT 컬럼명 
FROM 테이블명 
WHERE 컬럼명 REGEXP '정규표현식'

또는

SELECT 컬럼명 
FROM 테이블명 
WHERE 컬럼명 RLIKE '정규표현식'

예제 데이터

  • 아래와 같은 users 테이블이 있다고 가정

    id name email
    1 Alice alice@mail.com
    2 Bob bob@mail.net
    3 Charlie charlie@gmail.com
    4 David david@company.org
    5 Eve eve123@yahoo.com


2. 정규표현식 예제

특정 패턴이 포함된 데이터 찾기

  • 예제: 이메일 주소에 gmail이 포함된 사용자 찾기

      SELECT * 
      FROM users 
      WHERE email REGEXP 'gmail'
    
  • 결과:

    id name email
    3 Charlie charlie@gmail.com

특정 문자로 시작하는 데이터 찾기

  • 예제: name이 ‘A’로 시작하는 사용자 찾기

      SELECT * 
      FROM users 
      WHERE name REGEXP '^A'
    
  • 결과:

    id name email
    1 Alice alice@mail.com

특정 문자로 끝나는 데이터 찾기

  • 예제: .org로 끝나는 이메일 찾기

      SELECT * 
      FROM users 
      WHERE email REGEXP '\.org$'
    
  • 결과:

    id name email
    4 David david@company.org

숫자가 포함된 데이터 찾기

  • 예제: name에 숫자가 포함된 사용자 찾기

      SELECT * 
      FROM users 
      WHERE name REGEXP '[0-9]'
    
  • 결과:

    id name email
    5 Eve123 eve123@yahoo.com

여러 개의 단어 중 하나와 일치하는 데이터 찾기

  • 예제: emailmail.com 또는 gmail.com을 포함하는 사용자 찾기

      SELECT * 
      FROM users 
      WHERE email REGEXP 'mail\.com|gmail\.com'
    
  • 결과:

    id name email
    1 Alice alice@mail.com
    3 Charlie charlie@gmail.com


3. MySQL 정규표현식 패턴 정리

패턴 설명
^ 문자열의 시작
$ 문자열의 끝
. 임의의 한 문자
* 앞 문자가 0개 이상 반복
+ 앞 문자가 1개 이상 반복
? 앞 문자가 0개 또는 1개 존재
[abc] a, b, c 중 하나와 일치
[^abc] a, b, c 제외한 문자와 일치
[0-9] 숫자 0~9 중 하나와 일치
a|b a 또는 b와 일치
\. 마침표 (.) 자체를 검색할 때 사용

4. 주의할 점

  1. 대소문자 구분
    • MySQL에서 REGEXP는 기본적으로 대소문자를 구분
    • 만약 대소문자를 구분하지 않고 검색하려면 BINARY 키워드를 사용해야 함
    SELECT * 
    FROM users 
    WHERE BINARY name REGEXP 'alice'
    
    • 이 경우, ‘Alice’가 검색되지 않음
  2. 백슬래시(\) 이스케이프
    • MySQL에서는 백슬래시(\)를 사용하여 특수 문자를 이스케이프해야 함
    • 예: .을 문자 그대로 찾고 싶다면 \., ?을 문자 그대로 찾고 싶다면 \?를 사용해야 함
  3. 성능 고려
    • REGEXPLIKE보다 느릴 수 있으므로, 대량의 데이터에서 사용 시 성능을 고려해야 함


5. 결론

  • MySQL에서 정규표현식을 사용하면 일반적인 LIKE 연산자로 처리하기 어려운 복잡한 패턴 매칭을 수행할 수 있음
  • REGEXP를 활용하면 특정 문자 포함 여부, 시작/끝 문자 매칭, 숫자 포함 여부 등 다양한 조건을 적용하여 데이터를 검색할 수 있음
  • 하지만 성능 문제를 고려해야 하며, 대소문자 구분 여부나 백슬래시 이스케이프에 유의해야 함
  • 적절한 경우에 정규표현식을 활용하면 MySQL에서 더 강력한 데이터 검색을 수행할 수 있음
  • 참고 자료



💡Today I Thought

오늘의 체크리스트

  • 알고리즘 코드카타 1문제
  • SQL 코드카타 3문제
  • ERD, API 명세서 수정
  • 기술적 의사결정(DB/배포)
  • Github 연습
  • ML 고민해보기
  • TIL 작성

회고

 오늘도 팀원들과 SA문서 수정을 했다. 내일은 SA문서 초안 완성하고 저녁에는 환경 설정을 해서 수요일부터는 MVP 개발을 할 수 있도록 준비해야겠다. 부족한 팀장 잘 따라와주는 팀원들에게 무한 감사..🫠

댓글남기기