여러 번의 연산을 한 번의 SQL문으로 수행하기
Subquery
-연산을 여러번하기 위해 사용
-연산한 결과를 다른 연산이나 조건문에 사용하고 싶을 때 사용
-쿼리안에 sub으로 들어간 구문
select 컬럼1, 만든 컬럼
*여기서 컬럼1은 서브쿼리문에서 사용한 컬럼1을 다시 계산하고 싶을 때 뽑아와서 사용
from
(select 컬럼1,컬럼2 만든컬럼(별명)
from 테이블1
)a (서브쿼리에 이름주기)
*괄호 안의 select from 이 서브쿼리
※예시
select order_id, restaurant_name,
if(over_time>=0, over_time,0) over_time
from
(
select order_id, restaurant_name,
food_preparation_time-25 over_time
from food_orders
)a
----------food_orders 테이블에서 음식주문시간이 25분을 초과한 값을 가져와서 25분이 넘었으면 over_time 넘지 않았으면 0으로 표시
User segmentation(사용자 세분화) 와 조건별 수수료를 Subquery로 결합해보기
-음식점의 평균 단가별 segmentation을 진행하고, 그룹에 따라 수수료 연산하기
수수료 구간
~5000원 0.05%
~20000원 1%
~30000원 2%
30000원 초과 3%
select restaurant_name,
price_per_plate*rate_of_add "수수료"
from
(
select restaurant_name,
case when price_per_plate<5000 then 0.005
when price_per_plate>=5000 and price_per_plate<20000 then 0.01
when price_per_plate>=20000 and price_per_plate<30000 then 0.02
else 0.03
end rate_of_add,
price_per_plate
from
(
select restaurant_name
avg(price/quantity) price_per_plate
from food_orders
group by 1
)a
)b
복잡한 연산을 Subquery로 수행하기
-음식점의 총 주문수량과 주문금액을 연산하고, 주문수량을 기반으로 수수료 할인율 구하기
할인조건
수량이 5개 이하 10%
수량이 15개 초과, 총 주문금액이 300000 이상 0.5%
이외는 일괄 1%
select restaurant_name,
case when sum_of_quantity<=5 then 0.1
when sum_of_quantity>15 and sum_of_price>=300000 then 0.005
else 0.01
end "수수료 할인율"
from
(
select restaurant_name,
sum(quantity) sum_of_quantity,
sum(price) sum_of_price
from food_orders
group by 1
)a
필요한 데이터가 서로 다른 테이블에 있을때 조회
JOIN
LEFT JOIN, INNER JOIN
-필요한 데이터가 하나의 테이블에 모여있지 않고 여러 테이블에 있을 경우 불러오고 싶을 때 사용
-엑셀의 Vlookup과 유사
left join
-공통 컬럼(키값)을 기준으로 하나의 테이블에 값이 없더라도 모두 조회되는 경우 (null 값 있음)
select 조회 할 컬럼
from 테이블1 a left join 테이블2 b on a.공통컬럼명=b.공통컬럼명
*테이블1,2 뒤에 a,b는 쉽게 조회하기 위해 테이블에 별명 지어줌
inner join
-공통컬럼(키값)을 기준으로, 두 테이블에 모두 있는 값만 조회(null 값 없음)
select 조회 할 컬럼
from 테이블1 a inner join 테이블2 b on a.공통컬럼명=b.공통컬럼명
1. join 으로 두 테이블의 데이터 조회하기
-고객의 주문식당 조회하기
조회컬럼: 고객이름, 연령, 성별, 주문식당
+고객명으로 정렬, 중복 없도록 조회(distinct)
select distinct c.name,
c.age,
c.gender,
f.restaurnat_name
from food_orders f left join customers c on f.customer_id=c.customer_id
order by c.name
2. join 으로 두 테이블의 값을 연산하기
-주문 가격과 수수료율을 곱하여 주문별 수수료 구하기
조회컬럼: 주문번호, 식당이름, 주문가격, 수수료율, 수수료
+수수료율이 있는 경우만 조회
select a.order_id,
a.restaurant_name,
a.price,
b.vat,
a.price*b.vat "수수료율"
from food_orders a inner join payments b on a.order_id=b.order_id
'내배캠 > sql' 카테고리의 다른 글
[내일배움캠프/사전캠프] SQL 강의 5주차 (1) | 2024.09.23 |
---|---|
[내일배움캠프/사전캠프] SQL 강의 3주차 (1) | 2024.09.19 |
[내일배움캠프/사전캠프] SQL 강의 2주차 (1) | 2024.09.13 |
[내일배움캠프/사전캠프] SQL 강의 1주차 (1) | 2024.09.12 |