본문 바로가기

CS+/SQL

Mysql - LIKE , IF, CASE

= 연산자로 검색하면 열 값이 완전히 일치할 때만 참이 됩니다. 만약, 일부분만 일치 여부를 알고 싶다면 뭘 써야할까요?

바로 LIKE 입니다. 

 

1) 열명 LIKE '패턴' 

 

을 사용하면 열 값이 부분적으로 일치하는 경우에도 참이 됩니다. 

패턴을 정의할 때

 

% _  

 

퍼센트와 언더스코어를 쓸 수 있습니다. 퍼센트(%) 는 임의의 문자열을 의미하며, 언더스코어(_) 는 임의의 문자 하나를 의미합니다. * (애스터리스크) 는 LIKE 에서 사용할 수 없습니다. 

 

-Point!-

 

LIKE 술어를 사용하여 패턴 매칭으로 검색할 수 있다!

패턴을 정의할 때 사용할 수 있는 메타문자로는 % 와 _ 가 있다! 

 

이제 예제를 보겠습니다. 

 

위 테이블에서 SQL 이라는 글자를 중심으로 로우를 찾아보겠습니다.

 

 

%SQL% 

: SQL 이 들어가는 모든 문장을 찾습니다. 여기서 퍼센트는 문자열을 의미합니다. 

만약 SQL% 라고 쓴다면?

첫 번째 행만 찾게 됩니다. 이를 전방일치라고 합니다. 후방일치는 반대입니다. 

 

그렇다면 % 를 검색하고 싶다면?

 

% \ %

 

빽슬러시를 붙여주면 %를 포함하는 데이터를 찾아줍니다. 

 

해보니깐 퍼센트가 들어간 로우를 바로 찾아줍니다. 

2) IF

IF문 사용 전에 테이블을 하나 만들겠습니다.

 

아래 사이트 테이블 작성을 참고했습니다.

https://chobokkiri.tistory.com/23

 

[MySQL][TIP] IF, CASE, IFNULL 사용하기 (조건문)

1. 테스트할 테이블 생성 코드 [그림 1-1] 테스트할 테이블 및 데이터 CREATE TABLE `tbl_condition_test` ( `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, `col1` INT(10) UNSIGNED NULL DEFAULT NULL, `col2..

chobokkiri.tistory.com

 

위와 같은 테이블을 만들었습니다. 

여기서 COL1 을 기준으로 IF문을 써보겠습니다. 

 

IF문의 매개변수들을 보면 굉장히 직관적입니다. 

IF(조건식, 조건식 참일때 리턴 값, 거짓일 때 리턴값) 으로 이루어졌습니다.

이번에는 IFNULL을 보겠습니다. 

 

위 IF문과 같은 결과를 보여줍니다. IFNULL이라는 이름에서 느껴지듯이, 

NULL이 있을 경우(=참인 경우)의 리턴 값과, 아닐 때의 리턴값으로 매개변수가 이루어져있습니다. 

여기서 주의할 것은

첫 번째 매개변수에 들어가는 칼럼열값을 기준으로 NULL의 유무를 확인한다

는 것입니다.

즉, 위 쿼리를 기준으로 말하면 

 

COL1 칼럼이 NULL 이라면 COL1값을 출력해. NULL이 아니면 COL2를 출력해줘라는 의미입니다.

 

헷갈리는 분들도 있을 거라 생각합니다. 

이번에는 id칼럼을 첫 번째 매개변수로 넣었습니다. 그러면 어떻게 되죠? 

id 칼럼에 null 값이 있으면 id 값 그대로 출력하고, 아니라면 col2 값을 출력해줘

라는 의미가 됩니다. 

 

하는 김에 case 문까지 똑같이 해보겠습니다. 

 

case 문으로 위에서 한 것과 똑같은 조건을 달아주었습니다. 

대신, 이번에는 리턴값을 달리했습니다. 

then 뒤에 있는 값이 앞의 조건이 참일 때의 리턴값입니다. 

3) case 문

case 문에 대해 좀 더 자세히 보겠습니다.

 

위 테이블로 해보겠습니다. 

 

when 구 앞에 열을 지정해서 해주는 위와 같은 방식을 '검색 case' 라고 합니다. 

when 에서 조건을 걸어주고 이에 대해 then 을 통해 리턴값을 명시 해주고 

case문이 끝날 때는 항상 end를 써줍니다. 

 

이것도 검색 케이스입니다. 

사용법은 간단합니다. 

 

검색 케이스 말고 단순 케이스라는 것도 있습니다. 

 

차이는 case 문 다음에 열을 선택해주고 이에 대한 조건을 

바로 값으로 표기해주는 것이 차이입니다. 

둘 중에 어떤 게 좋냐고 묻는다면

 

코딩테스트 준비를 기준으로는 '검색 케이스 '  사용이 유용한 것 같습니다. 

뒤에서 풀 문제도 보면 '검색케이스'로 문제를 풀 수 있기 때문입니다. 

 

이제, 문제를 풀어보겠습니다. 

아래 링크에서 풀어보실 수 있습니다. :) 

 

https://programmers.co.kr/learn/courses/30/parts/17047

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

**문제1**

 

EL 이라는 글자가 들어갔으며 'Dog'인 데이터만 추출해주라는 문제입니다. 

조건문에서 and 나 or 를 쓰는 건 매우 간단하니 따로 포스팅은 하지 않겠습니다. 

 

풀어보셨나요?

저의 정답을 공개하겠습니다 :) 

 

**문제2**

다음 문제입니다. 

이번에 조금 어려울 수 있습니다. 

 

검색을 하는 것 똑같은데 그것에 따라 리턴값을 달리 해줘야합니다. 

방법은 2가지가 있습니다. 

 

1) IF 

 

2) CASE 문

 

먼저, IF 문으로 풀어보겠습니다. 

 

IF(조건식, 참일 때의 리턴값, 거짓일 때의 리턴값) 

간단하고 뭔가 친숙합니다. 

 

CASE 문을 볼까요?

 

CASE 문은 약간 낯설수 있습니다. 

하지만 CASE 문도 일단 알아는 두셔야 합니다. WHEN 다음에 조건식을 넣어주고, THEN 다음에는 리턴값 

그리고 전부 다 아닐 경우네는 ELSE 문을 써주면 됩니다. 

 

ELSE를 생략하면 ELSE NULL 이 되는 것에 주의해야 합니다. 

CASE 문의 ELSE는 생략하지 않는 편이 낫습니다. 

 

오늘 포스팅은 여기까지 입니다 :)