프로그램 관련/SQL

[SQL] LIKE를 써서 원하는 조건의 데이터만 뽑아내기

RuBP 2023. 4. 17. 13:28
반응형
반응형

이번에는 SQL 구문에서 정말 많이 사용되는 요소 중 하나인 LIKE문에 관해 알아보도록 할 예정이다.

LIKE문의 경우, 흔히 와일드카드(Wildcard) 문자열과 함께 사용해서

원하는 조건의 문자열을 지닌 데이터를 추출하기 위해서 자주 사용된다.

특히나 실무적으로도 자주 사용되는 구문이므로 해당 내용은 꼭 알아두길 바란다.

 

먼저, 다음의 경우를 생각해보자.

데이터 추출 작업을 위해 데이터베이스에서 원하는 데이터를 뽑아야 하는 상황에 직면했다 생각하자.

주어진 고객 정보 테이블(CUSTOMER)에서 원하는 정보를 뽑아야 하는데, 다음의 조건이 주어졌다 하자.

" 고객명(NAME)에서 성은 김씨로 시작하는데, 이름이 외자가 아닌 사람들을 모두 뽑아주세요 "

위와 같은 조건을 한 줄의 SQL구문으로 처리하려면 어떻게 짜야할까?


SQL상에서 LIKE 구문을 활용하는 방식은 간단하게 다음의 형태로 나타낼 수 있다.

SELECT (추출할 속성들)
FROM (TABLE명)
WHERE (특정속성) LIKE '(조건)'
...
;

WHERE절에서 LIKE 구문을 사용하게 되며, (속성) LIKE '(조건)'의 형태로 사용하게 된다.

이때, 문자열로 조건을 나타내되, 와일드카드 문자를 활용해서 추출할 대상을 표현하게 된다.

와일드카드 문자는 크게 2가지 (%, _)가 있다.

각각의  역할은 다음과 같다.

  • %(퍼센트): 0개 이상의 아무 문자나 오면 OK
  • _(언더바): 정확히 1개의 아무 문자나 오면 OK

자세한 사용법은 아래의 예제를 토대로 알아나가보도록 하자.


먼저, LIKE 구문을 사용하기 위해서 다음과 같은 샘플 데이터를 활용할 예정이다.

 

LIKE 구문 사용을 위한 샘플데이터

이전에 NULL값 처리를 위해 만들어놓은 ACCOUNT 테이블을 활용할 예정이다.

여기서, id 속성에 해당하는 값을 활용해서 원하는 정보만 추출해보도록 하자.

 

 

먼저, id에서 s로 시작하는 데이터만을 뽑아오려고 한다.

 

id가 s로 시작하는 데이터만 추출하기

앞서 % 기호가 0개 이상의 아무 문자열을 의미한다고 했으므로,

WHERE절에 다음과 같이 적어주면 된다.

... WHERE ID LIKE 's%' ...

참고로 문자열에서 소문자 s 대신 대문자 S를 적어도 결과는 동일하게 나오긴 한다.

다만, 명확하게 표현하기 위해서 소문자 s를 적어줬다.

위 SQL 구문이 처리할 수 있는 문자열은 's', 'ss', 's123', 'sabcdefg', ... 등이 있다고 보면 된다.

최종적으로 결과는 위 사진과 같이 sample01과 sql05가 추출되었다.

 

 

이번엔 id 속성에서 o를 사용하지 않은 모든 데이터를 뽑는다 생각하자.

 

o를 사용하지 않은 데이터만 추출

앞서 % 기호와 NOT을 응용하면 위 구문과 같이 표현할 수 있다.

... WHERE ID NOT LIKE '%o%' ...

먼저, 아무 곳에서나 o를 사용한 데이터를 뽑는다고 하면, WHERE ID LIKE '%o%'의 형태로 표현된다.

이 경우, 'o', 'abco', 'o1234', 'oooooo' 등의 문자열이 위 조건에 해당되어 추출되게 된다.

하지만, o를 사용하지 않는 데이터만 추출하라 했으므로, LIKE 대신 NOT LIKE를 써서 데이터를 추출하게 됐다.

최종 결과는 id에서 o를 쓰지 않은 id02, sample01, sql05가 추출되었다.

 

 

이번엔 조금 조건을 복잡하게 둬서 세 번째 문자열이 l인 데이터만 뽑아보도록 하자.

 

세 번째 문자열이 l인 데이터만 추출

먼저, 정확한 자릿 수를 고려해야 하므로, 1개의 문자열을 의미하는 _를 사용해야 할 것이다.

이때, 세 번째 자리는 l로 고정되어 있으므로, 앞부분은 '__l'의 형태로 올 것이다.

그리고 그 뒤는 아무 문자열이나 오면 되므로, 결과적으로 '__l%'라는 조건의 문자열을 얻어내게 된다.

최종적으로 사용하는 구문은 아래와 같다.

... WHERE ID LIKE '__l%' ...

따라서, 위 상황에서 얻어낸 데이터는 hello03, sql05가 존재하게 된다.


이렇게 해서 LIKE 구문과 와일드카드 사용에 관해 알아보게 됐다.

그러면, 이제 앞선 예제를 풀어보도록 하자.

 

먼저, 고객명에서 성이 김씨로 시작하므로, 맨 첫 번째 문자는 ''이 들어가게 된다.

그 다음, 이름은 외자가 아니여야 하므로, 이름은 두 글자 이상이 되어야 한다.

따라서, 이름에 해당되는 문자는 '__%'로 표현된다.

최종적으로 위 결과를 합치면 다음의 구문으로 표현 가능하다.

" SELECT * FROM CUSTOMER WHERE NAME LIKE '김__%'; "

참고로, 앞선 와일드카드 문자열에 관해 제대로 이해했으면, 다른 형태로도 위 결과를 나타낼 수 있을 것이다.

즉, LIKE '김__%' 대신, LIKE '김_%_'이나 LIKE '김%__'으로 해도 문제가 없다는 게 이해될 것이다.

 

이처럼 LIKE 구문과 와일드카드 문자열을 이용하면 원하는 데이터를 자유자재로 추출할 수 있다.

따라서 LIKE 구문은 문자열을 다룰 때 자주 써보도록 하는 것이 좋다.