상세 컨텐츠

본문 제목

#7. IF/CASE 문법

내일배움캠프 학습/SQL

by 남민우_ 2024. 10. 23. 17:54

본문

1. IF문

C/C++ 등 다른 언어와 마찬가지로 조건을 지정할 때 사용하는 키워드 이다.

C/C++을 학습한 사람이라면 쉽게 이해 가능하겠지만, 사용 방식이 조금 다른데

구조는 다음과 같다

if(조건, 조건 충족 시, 충족x 시)

 

예시 코드

select restaurant_name,
       cuisine_type "원래 음식 타입",
       if(cuisine_type='Korean', '한식', '기타') "음식 타입"
from food_orders

이 코드에서 if 문은

 if(cuisine_type='Korean', '한식', '기타') "음식 타입"

과 같이 사용되었다.

 

if 문 안에 특정하고 싶은 조건, cuisine_type = 'Korean' 과

조건에 부합할 경우에 해당하는 '한식',

부합하지 않을 경우에 해당하는 '기타' 로 작성된다.

 

출력 결과는 다음과 같다.

cuisine_type이 korean 일 경우 '음식 타입' 이라는 컬럼이 '한식'으로 출력되고, 그렇지 않을 경우 '기타'로 출력되는 모습을 볼 수 있다.

 

if문 안에는 여러 추가 문법을 더 작성할 수 있는데, 그 중에서 먼저 Replace 사용 예시를 들어본다.

Replace 추가 사용 예시

select addr "원래 주소",
       if(addr like '%평택군%', replace(addr, '문곡리', '문가리'), addr) "바뀐 주소"
from food_orders
where addr like '%문곡리%'

실행 결과

조건인 addr like '%평택군%' 일 경우, 즉 평택군을 포함할 때만 '문곡리' 가 '문가리'로 대체되며,

그렇지 않을 경우 addr 값인 주소가 그대로 출력되는 모습을 볼 수 있다.

 

Substring 추가 사용 예시

select substring(if(email like '%gmail%', replace(email, 'gmail', '@gmail'), email), 10) "이메일 도메인",
       count(customer_id) "고객 수",
       avg(age) "평균 연령"
from customers
group by 1

실행 결과

substring 안에 문법이 다소 복잡하게 느껴질 수 있는데, 모두 사용해봤던 키워드이며 묶어서 보면 크게 어렵지 않다.

이렇게 항목을 나눠서 볼 수 있는데 하나씩 설명하면 다음과 같다

1. Replace(email, 'gmail', '@gmail')

데이터 값을 대체하는 replace 기법이다. 위에서도 추가 사용 예시로 사용되었다.

email 컬럼에 'gmail' 을 '@gmail' 로 변경하도록 한다

 

2. if(email like ~ , email)

이번 파트에서 배우고 있는 if문의 사용이다. 다만 like 가 같이 사용되었는데 해당 코드에서는 gmail 이라는 단어가 들어갔을 경우 로 판단한다.

따라서 email 컬럼에 gmail 이라는 단어가 들어갔을 경우 1번 replace 를 사용하고, 아닐 경우 email로 대체한다 라고 볼 수 있다.

 

3. substring( ~ )

#5 ~ 6. 문자 가공 시간에 배웠던 substring 문법이다. 원하는 문자만 남기도록 하는 키워드이며 해당 코드에서는 2번으로 가공된 문자에서 10번째부터만 출력하도록 하는 것이다. 10번째부터 몇번째까지 출력하도록 하는 끝값은 지정해주지 않았다.

 

4. "이메일 도메인"

as 가 빠져서 혼동할 수도 있으나, 단순히 조회된 데이터를 보기 쉽도록 컬럼에 별명을 붙여주는 키워드이다.

 

따라서 실행 결과는 다음과 같다.

 

 

이렇게 한가지 조건을 특정해 추가 동작을 하고자 할 때는 IF 문을 사용하면 된다는 것을 알게 되었다.

다만 원하는 조건이 한가지가 아닐 때도 있는데, 이런 경우에는 CASE 문을 사용한다.

 

2. CASE문

case문은 조건별로 적용할 값을 지정해줄 수 있다.

코드를 먼저 보면서 설명하도록 하면

SELECT CASE WHEN cuisine_type = 'Korean' THEN '한식'
		WHEN cuisine_type in ('Japanese', 'Chinese') then '아시아'
		ELSE '기타' END as "음식 타입",
	cuisine_type
FROM food_orders fo

처음 CASE 사용 후 cuisine_type = 'Korean' 일 경우, '한식' 으로 출력되는 모습을 볼 수 있다.

다만 이 '음식 타입' 에 '아시아' 와 '기타' 가 같이 보이는데 이는 코드를 보면 이해할 수 있다.

WHEN 의 두번째 사용에 cuisine_type in ('Japanese', 'Chinese') 에 해당하는 경우 '아시아'로 출력되고,

위에 언급된 두가지 조건, Korean, Japanese, Chinese 가 모두 아닐 경우 ELSE 로 빠지면서 '기타' 로 출력되는 모습을 볼 수 있다.

이후 CASE문 마지막에 END 를 작성해준다.

 

CASE문의 문법 구조는 다음과 같다.

case when 조건1 then 값(수식)1
	when 조건2 then 값(수식)2
	else 값(수식)3 
end

CASE 키워드는 조건문을 시작할 때 처음만 사용하고, 조건문을 끝낼 때 END 를 사용한다.

그 안에 조건 하나하나 마다 WHEN 을 이어서 사용해 새로운 조건의 시작임을 알린다.

THEN 을 통해서는 이 WHEN으로 판명한 조건이 부합될 경우 어떤 값/수식으로 출력할 것인지 알려준다.

 

사용 예시

select order_id,
       price,
       quantity,
       case when quantity=1 then price
            when quantity>=2 then price/quantity end "음식 단가"
from food_orders

출력 결과는 다음과 같다.

case 문을 사용한 부분만 살펴보자면,

첫 when 조건에서는 quantity 가 1일 경우, price를 그대로 출력하도록 하고

두번째 when 조건에서는 quantity 가 2 이상일 경우 price/quantity 를 통해 평균 가격을 출력하도록 한다.

이후 end 를 통해 case 문을 마친다.

 

이 예시를 통해 then 부분에 단순 값 뿐만 아니라 수식을 포함해도 가능하다는 것을 알 수 있다.

 

여기서는 else 문이 사용되지 않았는데, 그 이유는 처음 when 으로 첫 조건 설정 이후 그 외의 경우를 따지고자 하지 않았기에 else문을 따로 작성하지 않았다.

 

이러한 CASE문의 사용은

1. 새로운 카테고리를 만들 때

2. 연산식을 적용할 조건을 지정할 때

3. 다른 문법 안에서 적용할 때

사용할 수 있다.

'내일배움캠프 학습 > SQL' 카테고리의 다른 글

#9. DATA TYPE 오류 확인  (3) 2024.10.23
#8. IF/CASE 실습  (0) 2024.10.23
#6. 문자 데이터 가공 실습  (2) 2024.10.18
#5. 문자 데이터 가공 - 형태 변화  (1) 2024.10.18
#4. 문제 풀이 - 주문 금액 조회  (0) 2024.10.18

관련글 더보기