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 사용 예시를 들어본다.
select addr "원래 주소",
if(addr like '%평택군%', replace(addr, '문곡리', '문가리'), addr) "바뀐 주소"
from food_orders
where addr like '%문곡리%'
실행 결과
조건인 addr like '%평택군%' 일 경우, 즉 평택군을 포함할 때만 '문곡리' 가 '문가리'로 대체되며,
그렇지 않을 경우 addr 값인 주소가 그대로 출력되는 모습을 볼 수 있다.
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 문을 사용한다.
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. 다른 문법 안에서 적용할 때
사용할 수 있다.
#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 |