본문 바로가기
MySQL/MySQL 기본 CRUD

[기본 CRUD] 4. LIKE 키워드로 패턴 매칭에 의한 검색하기

by Fletcher 2024. 8. 7.

 

반갑습니다!

저번 포스트에서 WHERE 키워드를 이용한

단일 조건 및 복합 조건 조회에 대해 알아보았습니다 ^^!

이번에는 LIKE 키워드를 이용해서 조금 더 유연하게

조회 조건을 지정해보도록 하겠습니다 ^^

 

 

 

 

books 테이블을 다시 한 번 조회해보도록 하겠습니다

컬럼 중에 데이터 타입이 문자열인 컬럼이 title, author_fname, author_lname 세 개인데요

title 컬럼에서 특정 단어를 포함하고 있는 레코드만 한 번 조건 조회 해보겠습니다

 

 

 

 

특정 패턴 매칭에 대한 조건 조회를 위한
SELECT ~ FROM ~ WHERE ~ LIKE ~ 구조입니다.

 

예시에서는 SELECT  *  FROM  books  WHERE  title  LIKE  '%The%' 라는 SQL문으로 사용했는데요!

books 테이블의 모든 컬럼의 데이터 중에서

title 컬럼의 값에 'The'라는 문자열이 포함되어 있는 레코드만

조회 결과로 불러온다는 뜻이 되겠습니다

 

LIKE 키워드 이용시 메타문자로 %(퍼센트) 또는 _(언더스코어)를 사용할 수 있습니다

퍼센트는 해당 문자열에 대해서, 언더스코어는 해당 문자에 대해서

패턴 매칭 여부에 따라 조건 조회를 출력합니다 ^^

 

문자열% → 문자열로 시작하는 패턴에 매칭되는 데이터를 조회합니다( 전방일치 )

%문자열 → 문자열로 끝나는 패턴에 매칭되는 데이터를 조회합니다(후방일치)

%문자열% → 문자열이 포함되어 있는 패턴에 매칭되는 데이터를 조회합니다(중간일치)

 

 

상기 이미지는 3번에 해당하는 예시입니다

그럼 메타문자에 따른 동작 결과를

1번과 2번에 대해서도 예시로 보여드리겠습니다

 

 

 

 

LIKE 키워드를 이용하여 title 필드에 조건을 첨부하여,

해당 필드의 데이터 값이 'The'라는 문자열로 시작하는 레코드들을 조회하도록 하였습니다

 

 

 

 

이번엔 반대로 'The'라는 문자열로 끝나는 조건을 만족하는 데이터를 조회했는데요

검색 결과, 책 데이터들 중 제목이 'The'로 끝나는 데이터는 존재하지 않습니다!

 

 

 

 

LIKE 키워드를 이용할 때 메타문자(% 또는 _) 없이 사용할 수도 있습니다

하지만 위 조건문은 title 필드의 데이터 값이 'the'인 레코드를 조회하겠다는 의미인데,

이렇게 되면 LIKE 키워드 없이, WHERE title = 'the'으로만 조회할 수 있는 SQL문이므로

별다른 의미가 없게 됩니다 ^^;;

 

 

 

 

※ 참고 ※

검색하고자 하는 문자열에 특수문자가 포함되는 경우에는 어떻게 처리해야 할까요?

 

예를 들어서,

% 기호가 포함되어 있는 레코드를 조건 조회하고 싶다고 가정해보겠습니다.

% 기호가 포함된 문자열을 그대로 입력하면,

메타문자로서의 %인지, 일반문자로서의 %인지 컴퓨터는 구분하지 못합니다.

이 때, 이스케이프 문자를 사용하는데요

 

 

우선 예시 이미지를 한 번 참고해보겠습니다

 

예시를 위해 레코드를 하나 추가했는데요

해당 레코드에는 title 필드의 값으로 % 문자가 포함되어 있습니다

이 LIKE 키워드를 이용해서 일반문자 %가 포함되어 있는 이 레코드만 한 번 조회해보도록 하겠습니다

 

 

 

 

LIKE 키워드 뒷 부분을 보시면

'%\%'라고 되어 있는 것을 보실 수가 있으십니다

퍼센트 기호 두 개 사이에 역슬래시(\)가 껴있는 것이 보이실텐데요

이 두 문자 중에 앞에 문자는 메타문자로서의 %이고,

역슬래시는 이스케이프 문자로서의 역할을 하며,

뒤의 문자는 일반문자로서의 %입니다 ^^!

 

즉, '%문자열'의 형태와 동일한 구조이며

해당 문자로 끝나는 패턴에 매칭되는 레코드를 조건 조회하라는 뜻이죠 ^^

 

 

 

하나의 예시를 더 들어보겠습니다 

 

이번엔 LIKE 키워드 뒤에 '%\%%' 구조입니다

%기호가 총 3개, 역슬래시가 1개가 있는데요

'%문자열%'와 같은 구조로서,

문자열 중 일반문자로서의 %기호가 포함되어 있는 데이터를 조회하라는 뜻이 되겠습니다 ^^

 

 

 

WHERE 키워드를 이용해 조건 조회시 LIKE를 이용하여

특정 문자열 및 리터럴 포함 여부 조건을 추가하는 것을 알아보았습니다 ^^

메타 문자를 이용하여, 전방일치 또는 중간일치 또는 후방일치에 대해 소개해드렸고

메타문자가 아닌 일반문자로서의 사용을 위해

이스케이프 문자(\)를 사용하는 것도 말씀드렸습니다 ^^!

 

 

 

 

다음 포스트에는,

데이터 조회시 특정 컬럼을 기준으로 정렬하는 ORDER BY와

정렬의 기준인 오름차순(ASC), 내림차순(DESC)에 대해서

포스팅하도록 하겠습니다 ^^