본문 바로가기
공부/mysql

Mysql 기본명령어 5 (LIKE)

by signature95 2022. 1. 25.
728x90
반응형

지난 포스트에 이어서 작성하는 내용입니다.

 

2022.01.24 - [공부/mysql] - Mysql 기본 명령어 4 (AND, OR, NOT 논리연산자)

 

Mysql 기본 명령어 4 (AND, OR, NOT 논리연산자)

지난 포스트에 이어서 작성하는 내용입니다. 2022.01.24 - [공부/mysql] - Mysql 기본 명령어3 (WHERE 구문, 연산자) Mysql 기본 명령어3 (WHERE 구문, 연산자) 지난 포스트에 이어서 작성하는 내용입니다. 2022.0

signature95.tistory.com

 

패턴 매칭을 통해 검색하는 방법입니다. LIKE를 입력하여 문자열의 일부를 비교하는 방식이죠

 

row_name LIKE 'pattern';

 

지난 포스트에서는 (=)를 사용하여 문자열 or 수치형 데이터 등이 검색한 내용과 동일한지 비교하는 것이라면, LIKE는 특정 숫자 혹은 문자열이 검색한 내용을 내포하고 있는지 여부를 비교하는 것입니다. 

 

페턴을 정의하는 경우에는 메타문자라는 것을 사용하는데, 이는 임의의 문자열을 의미하는 %와 임의의 문자 하나를 의미하는 언더스코어(_)가 있습니다. 

 

그렇다면 바로 실습을 해보겠습니다.

 

먼저 테이블의 내용입니다.

여기서 SQL을 포함하는 행을 검색하려면 다음과 같이 입력하면 됩니다.

 

SELECT * FROM sample25 WHERE text LIKE 'SQL%';

 

위를 해석하면 'sample25 테이블의 text라는 열에서 SQL 문자열을 포함하는 것의 전부 선택하라.'이라는 의미의 명령어입니다.

 

하지만, 위에 3행에도 분명 SQL 문자열이 포함되어 있는데 검색식에는 해당 내용이 없습니다.

 

이는 %를 뒤에만 입력해서 SQL로 시작하는 text를 검색하라는 패턴으로 입력되었기 때문입니다.

 

즉, 문자열을 포함하는 데이터를 검색하기 위해서는 %STR%, %INT% 등으로 패턴을 입력해야 하는 것입니다.

 

SELECT * FROM sample25 WHERE text LIKE '%SQL%';

만약 %SQL로 패턴을 입력하게 된다면, 문자열 마지막에 SQL 단어가 오는 데이터를 검색하기 때문에, 아무 데이터도 출력되지 않을 것입니다. 

 

 

그런데, 데이터의 유형이 24%, 59% 등으로 %로 표시가 되어 있다면 어떻게 %를 검색하게 될까요

 

결론부터 말하면 메타문자 자체를 검색하는 경우에는 %%%로 입력하지 않습니다. 이는 이스케이프라는 방법을 사용하여 처리를 하는데,   ( \ ) 를 사용해서 처리하게 됩니다.

 

즉, WHERE row_name LIKE '%\%%'; 로 입력하면 되는 것이죠.

 

바로 검색을 시도해 보겠습니다.

 

SELECT * FROM sample25 WHERE text LIKE '%\%%';

SELECT * FROM sample25 WHERE text LIKE '%\_%'; 로 언더스코어 메타문자를 검색할 때도 동일한 룰이 적용됩니다.

 

'%pattern%'에서 ( ' ) 를 검색할 때의 이스케이프는 '를 입력하면 됩니다. 

 

만약 I'm 을 검색하게 된다면, LIKE 'I''m' 의 형태로 입력하면 되는 것이죠.

728x90

댓글