지금까지는 where문을 이용해 데이터를 필터링하는 방법을 배워보았다. 하지만 실제 현업에서 추출된 데이터 중에서도 일부만 필요할 때가 있는데, 오늘은 이와 같이 데이터의 일정 부분만 가공하여 추출하는 함수들에 대해서 배웠다.
어떤 특정 문자(현재 값)를 다른 문자(바꿀 값)로 바꾸고 싶을 때 사용하는 함수이다.
replace(바꿀 컬럼, 현재 값, 바꿀 값)
1) 'Blue Ribbon' 식당이름을 'Pink Ribbon'로 바꿔라
select restaurant_name "원래 상점명",
replace(restaurant_name, 'Blue', 'Pink') "바뀐 상점명"
from food_orders
where restaurant_name like '%Blue Ribbon%'
2) 주소가 문곡리에서 문가리로 바뀌었을 때 이를 반영하라
select addr, replace(addr, "문곡리", "문가리") '바뀐주소'
from food_orders
where addr like "%문곡리%"
어떤 데이터의 특정 문자만 골라서 조회하고 싶을 때 사용하는 함수이다.
substr(조회 할 컬럼, 시작 위치, 글자 수)
1) 전체 주소에서 앞부분 "시도"에 해당하는 부분만 가져오고 싶을 때
select addr "원래 주소",
substr(addr, 1, 2) "시도"
from food_orders
where addr like '%서울특별시%'
원하는 문자 결과가 여러 컬럼에 걸쳐 있을 때 그 값들을 하나로 합치고 싶을때 사용한다
concat(붙이고 싶은 값1, 붙이고 싶은 값2, 붙이고 싶은 값3, .....)
1) 주소의 '시도' 부분과 식당 이름을 '[시도]식당명' 형태로 나타내시오
select restaurant_name "원래 이름",
addr "원래 주소",
concat('[', substring(addr, 1, 2), '] ', restaurant_name) "바뀐 이름"
from food_orders
where addr like '%서울%'
조건에 따라 다른 방법을 적용하고 싶을 때 사용한다. 원하는 조건을 충족할때와 아닐 때 각각 값을 다르게 지정해줄 수 있다.
if(조건, 조건을 충족할 때, 조건을 충족하지 못할 때)
1) 음식 타입이 "Korean"이면 "한식", 나머지는 "기타"로 표시하시오
select restaurant_name,
cuisine_type "원래 음식 타입",
if(cuisine_type='Korean', '한식', '기타') "음식 타입"
from food_orders
2) 주소를 문곡리에서 문가리로 변경하시오. 이때 주소가 평택군 문곡리인 경우에만 문가리로 변경하시오
select addr "원래 주소",
if(addr like '%평택군%', replace(addr, '문곡리', '문가리'), addr) "바뀐 주소"
from food_orders
where addr like '%문곡리%'
IF의 경우 한가지 조건에 대해서만 값을 지정할 수 있다. 여러 조건에 대해서 값을 지정해주고 싶다면 CASE를 사용하면 된다. IF의 확장 개념이라고 생각하면 된다
case when 조건1 then 값(수식)1
when 조건2 then 값(수식)2
else 값(수식)3
end
1) 고객을 나이와 성별에 따라 구분하시오
select case when(age between 10 and 19) and gender = 'male' then '10대 남성'
when(age between 10 and 19) and gender = 'female' then '10대 여성'
when(age between 20 and 29) and gender = 'male' then '20대 남성'
when(age between 20 and 29) and gender = 'female' then '20대 여성'
end '고객 분류', name,age, gender
from customers
where age between 10 and 29
다음의 조건으로 배달시간이 늦었는지 판단하는 값을 만들어주세요.
- 주중 : 25분 이상
- 주말 : 30분 이상
select case when day_of_the_week = "Weekday" then if(delivery_time >=25, "지각", "지각 아님")
when day_of_the_week = "Weekend" then if(delivery_time >=30, "지각", "지각 아님")
end "배달 지각 여부",
day_of_the_week,
delivery_time
from food_orders