[MySQL] 패턴 매칭 LIKE, REGEXP

2022. 9. 8. 03:21·Programming/MySQL
728x90

패턴 매칭(pattern matching)

MySQL은 데이터의 특정 패턴을 검색하기 위한 다음과 같은 패턴 매칭 연산자를 제공한다.

  • LIKE
  • REGEXP

또한, 임의의 문자나 문자열을 대체하기 위해서 와일드카드(wildcard) 문자를 사용할 수도 있다.

LIKE

LIKE 연산자는 특정 패턴을 포함하는 데이터만을 검색하기 위해 사용한다.

다음 예제는 Reservation 테이블에서 '장'으로 시작하는 이름(Name)으로 예약한 레코드를 선택하는 예제다.

SELECT * FROM Reservation
WHERE Name LIKE '장%';

'%'는 0개 이상의 문자라는 의미의 와일드카드(wildcard) 문자이다.

만약 특정 패턴을 포함하지 않는 데이터를 검색하고 싶을 때는 NOT LIKE 연산자를 사용하면 된다.

다음 예제는 Reservation 테이블에서 '장'으로 시작하지 않는 이름(Name)으로 예약한 레코드를 선택하는 예제다.

SELECT * FROM Reservation
WHERE Name NOT LIKE '장%';

와일드카드(wildcard)

와일드카드(wildcard)란 문자열 내에서 임의의 문자나 문자열을 대체하기 위해 사용되는 기호를 의미한다.

MySQL에서 사용할 수 있는 와일드카드 문자는 다음과 같다.

와일드카드 설명
% 0개 이상의 문자를 대체함.
_ 1개의 문자를 대체함.

다음 예제는 RoomNum 필드의 값이 20으로 시작하고, 바로 뒤에 두 자리 숫자가 더 나오는 레코드를 선택하는 예제다.

SELECT * FROM Reservation
WHERE RoomNum LIKE '20__';

위의 예제에서 RoomNum 필드의 값이 200이나 20,000인 레코드는 선택되지 않을 것이다.

REGEXP

LIKE 연산자보다 더욱 복잡한 패턴을 검색하고 싶을 때는 REGEXP 연산자를 사용할 수 있다.

REGEXP 연산자는 정규 표현식을 토대로 하는 패턴 매칭 연산을 제공한다.

 

REGEXP 연산자와 함께 사용할 수 있는 패턴은 다음과 같다.

패턴 설명
. 줄 바꿈 문자(\n)를 제외한 임의의 한 문자를 의미함.
* 해당 문자 패턴이 0번 이상 반복됨.
+ 해당 문자 패턴이 1번 이상 반복됨.
^ 문자열의 처음을 의미함.
$ 문자열의 끝을 의미함.
| 선택을 의미함.(OR)
[...] 괄호([]) 안에 있는 어떠한 문자를 의미함.
[^...] 괄호([]) 안에 있지 않은 어떠한 문자를 의미함.
{n} 반복되는 횟수를 지정함.
{m,n} 반복되는 횟수의 최솟값과 최댓값을 지정함.

다음 예제는 Name 필드의 값이 '홍'으로 시작하거나, '산'으로 끝나는 레코드를 선택하는 예제다.

SELECT * FROM Reservation
WHERE Name REGEXP '^홍|산$';

만약 해당 패턴과 일치하지 않는 데이터를 찾고 싶을 때는 NOT REGEXP 연산자를 사용하면 된다.

다음 예제는 Name 필드의 값이 '홍'으로 시작하지 않고, '산'으로 끝나지도 않는 레코드를 선택하는 예제다.

SELECT * FROM Reservation
WHERE Name NOT REGEXP '^홍|산$';

'Programming > MySQL' 카테고리의 다른 글

[MySQL] DB 공부  (0) 2022.09.13
[MySQL] 타입 변환 BINARY, CAST(), CONVERT()  (0) 2022.09.08
[MySQL] 흐름 제어 CASE, IF(), IFNULL(), NULLIF()  (0) 2022.09.08
[MySQL] 비트 연산자 (bitwise operator)  (0) 2022.09.08
[MySQL] 논리 연산자 (logical operator)  (0) 2022.09.08
'Programming/MySQL' 카테고리의 다른 글
  • [MySQL] DB 공부
  • [MySQL] 타입 변환 BINARY, CAST(), CONVERT()
  • [MySQL] 흐름 제어 CASE, IF(), IFNULL(), NULLIF()
  • [MySQL] 비트 연산자 (bitwise operator)
arajo
arajo
  • arajo
    아라 메모장
    arajo
  • 전체
    오늘
    어제
    • 분류 전체보기 (509)
      • Language (298)
        • HTML (55)
        • CSS (11)
        • JavaScript (70)
        • TypeScript (8)
        • Python (33)
        • Java (119)
        • C (0)
        • C# (2)
      • Programming (92)
        • Programming (14)
        • Web (51)
        • Apache (1)
        • MySQL (23)
        • AWS (3)
      • Framework | Library (26)
        • Framework | Library (3)
        • Vue.js (2)
        • React.js (5)
        • React Native (4)
        • Node.js (1)
        • Ajax (1)
        • Bootstrap (8)
        • Spring (1)
        • Flutter (1)
      • etc (2)
      • 휴식 (19)
        • 책 (13)
        • 일기 (5)
        • 게임 일기 (1)
      • A (71)
        • 공부 (18)
        • 기타 (6)
        • 일 (47)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

    object
    자바스크립트
    CSS
    리액트
    MySQL
    JavaScript
    TypeScript
    타입스크립트
    array
    객체
    변수
    제어문
    Java
    HTML
    web
    파이썬
    next.js
    Python
    event
    react
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
arajo
[MySQL] 패턴 매칭 LIKE, REGEXP
상단으로

티스토리툴바