본문 바로가기
DataBase/MYSQL

[MYSQL] LIKE 함수 - 특정 문자 검색하기

by 오늘은강박사갈거야~~ 2021. 5. 26.
반응형

LIKE() 함수

 

LIKE 함수는 문자열 내에서 내가 원하는 문자열을 찾는 함수입니다. REGEXP를 자주 사용하지만, 간단하게 LIKE를 사용하기도 합니다. LIKE함수는 WILDCARDS 문자들과 함께 쓰입니다.

 

 

WILDCARD에 대한 간단한 설명은 아래 적어두었습니다.

WILDCARDS(와일드 카드) 문자란 컴퓨터에서 특정 명령어로 명령을 내릴 때, 여러 파일을 한꺼번에 지정할 목적으로 사용하는 기호를 가리킨다. 이 문자는 어느 곳에서 사용하느냐에 따라 약간의 차이를 보인다. 주로 특정한 패턴이 있는 문자열 혹은 파일을 찾거나, 긴 이름을 생략할 때 쓰인다.

SQL에서의 와일드 카드간단히 문자열에서 하나 이상의 문자를 대체하는 데 사용되는 문자!라고 생각 해주시면 좋을 것 같습니다. 

 

이 WILDCARD 문자들에 대한 이해가 꼭 필요합니다. 

MYSQL의 LIKE함수에서 사용하는 WILDCARD 문자는 %_가 있습니다. 이것들과 문자열의 조합으로 검색하려는 문자열을 표현하는데 사용합니다.

 

WILDCARD 설명
% 0개 이상의 문자를 대신 표현할 수 있음.
_(Under Bar) 1개의 문자를 표현합니다.

 

 

WILDCARD 문자에 대한 간단한 표기 방법을 알아보겠습니다.

 

(1) %(Percentage)

1. %m 
-> 이 표현은 앞에 몇 개의 어떤 문자열이던 오게 되고 맨마지막이 m으로 끝나는 문자열을 표현한 것입니다. 
-> ham, asdfsadfdsfm, storm, m 등의 단어들이 해당될 수 있겠습니다.
-> 예시 중, m는 왜 해당이 되냐면 위의 표에서 언급했듯 %는 0개 이상의 문자열을 표현한다고 되어있기 떄문입니다. 

2. c%
-> 이 표현은 맨 처음에 시작하는 문자열은 c로 오게 되는 모든 문자열을 표현한 것입니다.
-> chicken, chqwer, c 등의 단어들이 해당 될 수 있겠습니다.
-> 예시 중, c가 해당하는 이유는 위의 m이 해당되는 이유와 동일합니다. 

3. %w%
-> 이제 슬슬 감이 오시죠? 이 표현은 문자열 중간에 w가 들어있는 모든 문자열을 표현한 것입니다.
-> w, hiwhi, kiwi 등의 단어들이 해당 될 수 있겠습니다.

 

(2) _(UnderBar)

1. _012
-> 이 표현은 4개의 문자열로 설정하였고, 그 중 2, 3, 4번째 문자열은 0, 1, 2로 고정, 1번째 문자열은 모든 문자열을 허용하게 되어 있습니다. 
-> 예를 들어 t012, d012, 1012 등의 문자열이 해당되겠습니다.
-> 44012 혹은 bro021와 같은 문자열은 여기에 해당이 될까요?
정답은 안됩니다! 이유는 _(UnderBar)라는 WILDCARD 문자는 하나의 문자열만을 표현하기 때문입니다.

2. m_ri_
->이 표현은 5개의 글자로 되어있으며, 1, 3, 4번째 문자열은 각각 m, r, i로 고정 해 두었고, 2, 5번째 문자열은 어떤 문자열이라도 허용하는 문자열을 허용하였습니다.
->예를 들어 maria, mvriz, mqrip, m9ri8 와 같은 문자열이 해당이 됩니다.

 

(3) % ,  _ 의 조합

위 % 와 _를 이해하는 차원에서 작성해 보았습니다. 다음 표현에 해당하는 문자열입니다. 

1. c_o%
-> cho, c1okkkkkkkk

2. %qwerty_
-> himynameqwerty1, yourqwerty1

 

WILDCARD 문자 학습하시느라 고생하셨습니다. 이 부분만 잘 학습하셨다면, 아래는 그냥 쉽게 지나갈 수 있는 내용입니다. 

 

드디어 LIKE 함수의 사용법에 대하여 알아볼 차례입니다. LIKE 함수는 WHERE절에서 조건에 부합하는 문자열을  찾는 경우에 사용합니다. 사용 형태는 다음과 같습니다.

 

WHERE 컬럼이름 LIKE '해당하는 표현식'

 

 

[1] 사용 형태

 

아래 표를 가지고 LIKE함수에 대해 알아보겠습니다.

 

NICKNAME NAME COUNTRYCITY NAMECODE
sigong 강박사 한국-서울 mvpblack_sigong
storm 정박사 미국-뉴욕 ballistix_storm
yogg 조석사 영국-런던 tempest_yogg 

TABLE

 

SELECT NAME
FROM TABLE
WHERE NAMECODE LIKE '%_%'

-> 결과는
강박사
정박사
조석사
SELECT NICKNAME
FROM TABLE
WHERE NAMECODE LIKE '_박사'

-> 결과는
sigong
strom
SELECT NAME
FROM TABLE
WHERE COUNTRYCITY LIKE '__-__'

-> 결과는
강박사
정박사
조석사

 

[2] 참고 사항

- 만약 검색하려는 문자열이 WILDCARD 인 _이거나 & 인 경우는 어떻게 할까요?

  :  WILDCARD인 _ % 앞에 \(역슬레쉬)를 넣어주면 되겠습니다.

 

아래 예시를 통해 설명드리도록 하겠습니다.

저는 COLUMN에서 %(퍼센트) 표기가 들어있는 값들을 모두 불러오는 쿼리를 작성하였습니다. 이 때 LIKE 뒤에 %\%% 라는 표현식을 사용했는데요. 이때 맨 앞과 맨 뒤에 %는 WILDCARD를 의미하고, 역슬레쉬와 그 다음 %는 제가 찾으려는 % 문자열을 표현한 것 입니다. 

SELECT *
FROM TABLE
WHERE COLUMN LIKE '%\%%'

 

[3] 참고 자료

 

https://www.w3resource.com/mysql/string-functions/mysql-like-function.php

 

MySQL LIKE operator string function - w3resource

MySQL LIKE operator along with WILDCARDS finds a string of a specified pattern within another string.

www.w3resource.com

 

반응형

댓글