📌 My Sql에서 부분 일치 검색으로 중복 데이터 제거하기

2025. 3. 25. 14:53·기술블로그

📌 개념 정리

이번 포스팅에서는 MySQL에서 부분 일치 검색을 활용하여 '한강'이라는 단어를 포함하는 모든 책 레코드를 조회하는 방법을 소개합니다. 또한, 단순 '=' 대신에 **와일드카드(%)**와 **정규표현식(RLIKE)**을 사용하여 어떻게 더 유연하게 데이터를 검색할 수 있는지 설명합니다.


🚦 핵심 개념 정리

부분 일치 검색(Like): 문자열의 특정 패턴을 찾을 때 LIKE 연산자와 와일드카드(%)를 사용합니다. 이때 **%**는 0개 이상의 임의 문자열을 의미하며, 컬럼 값 내 특정 문자열 포함 여부를 확인합니다.

와일드카드(%): LIKE 절에서 사용되며, 앞뒤로 **%한강%**처럼 위치할 수 있습니다. %한강%은 "한강"이라는 문자열 앞뒤로 어떤 문자열이 와도 일치하는 형태입니다.

RLIKE/REGEXP: MySQL에서 제공하는 정규표현식을 사용하여 더 복잡한 검색 패턴을 활용할 수 있습니다. 예를 들어, 한글 초성 매칭, 여러 구문을 동시에 매칭할 때 유용합니다.


💻 실전 적용 예시

📌 상황 1: LIKE 문 사용

SELECT *
FROM books
WHERE author LIKE '%한강%';

설명: LIKE '%한강%'은 한강이라는 문자열이 author 컬럼 안에 어디에 위치하든 관계없이 모든 경우를 조회할 수 있습니다. 예를 들어, '한강 저', '작가 한강 이야기', '한강은...' 등 모든 책을 찾을 수 있습니다.

📌 상황 2: 정규표현식 (RLIKE/REGEXP) 사용

SELECT *
FROM books
WHERE author RLIKE '한강';

설명: RLIKE '한강'은 author 컬럼에 한강이 포함된 레코드를 찾습니다. LIKE보다 더 복잡한 패턴을 사용할 수 있기 때문에, 다양한 검색 조건이 필요할 때 유용합니다. 예를 들어, 한글 초성이나 여러 구문 동시 매칭 등 복잡한 패턴을 쉽게 적용할 수 있습니다.


🚀 고급 팁

LIKE vs. FULLTEXT: LIKE는 간단한 부분 일치 검색에 용이하지만 대용량 테이블에서는 성능 이슈가 발생할 수 있습니다. 텍스트 검색이 자주 이루어지는 경우, MySQL FULLTEXT INDEX를 사용하는 것이 좋습니다.

인덱스 활용: WHERE 절에 사용되는 author 컬럼에 인덱스를 걸어두면 성능을 향상시킬 수 있습니다. 하지만, %한강%와 같은 앞쪽에 와일드카드가 포함된 검색은 인덱스 효율이 떨어집니다. 대신 한강%처럼 오른쪽 와일드카드를 사용하면 인덱스를 잘 활용할 수 있습니다.

대소문자 및 한글 정규화 이슈: MySQL의 COLLATION 설정에 따라 대소문자 구분이 달라지거나 한글 정규화 문제로 검색 결과가 달라질 수 있습니다. 검색 전에 COLLATE 설정을 확인하여 정확한 검색 결과를 얻을 수 있습니다.


✅ 마무리 요약 및 복습 포인트

  1. LIKE를 사용하면 간단한 부분 일치 검색이 가능하며, **%**를 적절히 활용하면 유연한 검색을 수행할 수 있습니다.
  2. RLIKE/REGEXP를 활용하면 더 복잡한 패턴 매칭이 가능하여, 다양한 검색 조건에 대응할 수 있습니다.
  3. 인덱스 활용: 성능 최적화를 위해 컬럼 인덱스와 FULLTEXT 인덱스를 고려할 수 있습니다.
  4. 대소문자 구분 및 COLLATE 설정을 통해 정확한 검색 결과를 얻을 수 있습니다.

이 포스팅을 참고하여 MySQL에서 효과적인 부분 일치 검색 및 최적화를 진행해 보세요! 🚀

'기술블로그' 카테고리의 다른 글

📌 MySQL Group By와 집계 함수 활용(Error Code 1055 해결 방법)  (0) 2025.03.25
📌 Select *와 Select 컬럼 지정의 차이점: 성능 최적화와 효율적인 쿼리 작성  (0) 2025.03.25
📌 MySQL 테이블에서 중복된 데이터를 효과적으로 삭제하는 방법  (0) 2025.03.25
📌 MySQL 데이터베이스 정리 (with 크롤링 in Selenium, PymySQL)  (0) 2025.03.25
📌 크롤링 시 IndexError 예외처리 방법 (초기값은 있었지만 없을경우)  (0) 2025.03.25
'기술블로그' 카테고리의 다른 글
  • 📌 MySQL Group By와 집계 함수 활용(Error Code 1055 해결 방법)
  • 📌 Select *와 Select 컬럼 지정의 차이점: 성능 최적화와 효율적인 쿼리 작성
  • 📌 MySQL 테이블에서 중복된 데이터를 효과적으로 삭제하는 방법
  • 📌 MySQL 데이터베이스 정리 (with 크롤링 in Selenium, PymySQL)
Chansman
Chansman
안녕하세요! 코딩을 시작한 지 얼마 되지 않은 초보 개발자 찬스맨입니다. 이 블로그는 제 학습 기록을 남기고, 다양한 코딩 실습을 통해 성장하는 과정을 공유하려고 합니다. 초보자의 눈높이에 맞춘 실습과 팁, 그리고 개발하면서 겪은 어려움과 해결 과정을 솔직하게 풀어내려 합니다. 함께 성장하는 개발자 커뮤니티가 되기를 바랍니다.
  • Chansman
    찬스맨의 프로그래밍 스토리
    Chansman
  • 전체
    오늘
    어제
    • 분류 전체보기 (802)
      • Python (32)
      • 프로젝트 (115)
      • 과제 (25)
      • Database (40)
      • 멘토링 (11)
      • 특강 (37)
      • 기술블로그 (41)
      • 기술블로그-Fastapi편 (33)
      • 기술블로그-Django편 (154)
      • 기술블로그-Flask편 (36)
      • AI 분석 (5)
      • HTML & CSS (31)
      • JavaScript (17)
      • AWS_Cloud (21)
      • 웹스크래핑과 데이터 수집 (14)
      • Flask (42)
      • Django (77)
      • Fastapi (16)
      • 연예 (14)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    bts
    youngprofessionals
    global politics
    homebartrend
    btsjungkook
    urbantrends
    btscomeback
    gpterror
    newpoliticalparty
    chinanightlife
    lawsuitculture
    classaction
    life reflection
    btsdischarge
    btsreunion
    americaparty
    self-growth
    college reunions
    뷔
    hotcoffeecase
    chatgpterror
    trumpmuskclash
    livebroadcast
    smartphonedurability
    titaniumcase
    travel ban
    americanlaw
    basalcellcarcinoma
    RM
    remittance
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Chansman
📌 My Sql에서 부분 일치 검색으로 중복 데이터 제거하기
상단으로

티스토리툴바