PM 부트캠프

[PM 부트캠프 47일차 후기] SQL JOIN문 완전 정복 2탄

미미유❤ 2025. 8. 20. 20:38

PM 부트캠프 47일차 후기


오늘은 서비스 기획 심화 과제 제출 마지막날이었다.

PM 부트캠프에서 친해진 친구 중에 아직 과제를 덜 끝낸 친구가 있어서 어려운 부분을 가르쳐줬었다. 뿌듯뿌듯💞

오늘은 책도 읽고 여러 강의도 듣고 조금 여유로운 하루를 보냈다😊

 

 

 

 

SQL 공부 11일차


JOIN문 기초는 여기서!

 

[PM 부트캠프 46일차 후기] SQL의 JOIN문이란?

PM 부트캠프 46일차 후기오늘은 이번조의 담임 튜터님이랑 1:1 면담이 있었다. 30분이었던 면담이 많은 질문으로 인해서 1시간 넘게 이야기를 나눴었다.면담하고 있으니 다른 튜터님들도 구경오셨

mimiyu.tistory.com

 

챕터  4-6 JOIN으로 두 테이블의 데이터 조회하기


 

실습6-1 한국음식의 주문별 결제 수단과 수수료율을 조회해 줘

조회 컬럼 : 주문 번호, 식당 이름, 주문 가격, 결제 수단, 수수료율

*결제 정보가 없는 경우도 포함하여 조회

select f.order_id,
       f.restaurant_name,
       f.price,
       p.pay_type,
       p.vat
from food_orders f left join payments p on f.order_id=p.order_id
where cuisine_type='Korean'

 

 

 

실습6-2 고객의 주문 식당 조회해 줘.

조회 컬럼 : 고객 이름, 연력, 성별, 주문 식당

*고객명으로 정렬, 중복 없도록 조회 

select distinct c.name,
       c.age,
       c.gender,
       f.restaurant_name
from food_orders f left join customers c on f.customer_id=c.customer_id
order by c.name

 

 

 

◆ NULL

- SQL에서 NULL은 값이 없거나 모른다는 것을 의미.

 

IS NULL 

- IS NULL이란? NULL값이 뜬 데이터만 조회하는 것


IS NOT NULL의 기본 구조

select 컬럼명

from   테이블명

where 컬럼명 is null

 

IS NOT NULL 

- Is not null이란? NULL값이 아닌 데이터만 조회하는 것

 

IS NOT NULL의 기본 구조

select 컬럼명

from   테이블명

where 컬럼명 is not null

 

 

 

SELECT DISTINCT

- Selesct Distinct이란? 중복되는 데이터를 제거하고 조회할 때 사용하는 키워드

 

SELECT DISTINCT의 기본 구조

select distinct 조회할 컬럼

from 테이블

 

 

 

실습6-3 고객의 주문 식당 조회해 주고 NULL값이 아닌 데이터만 조회해 줘.

조회 컬럼 : 고객 이름, 연력, 성별, 주문 식당

*고객명으로 정렬, 중복 없도록 조회 

select distinct c.name,
       c.age,
       c.gender,
       f.restaurant_name
from food_orders f left join customers c on f.customer_id=c.customer_id
where c.name is not null
order by c.name

 

 

 

DISTINCT

- Distinct이란? 중복되는 데이터를 제거하고 조회할 때 사용하는 키워드

 

DISTINCT의 기본 구조

select distinct 조회할 컬럼

from 테이블

 

 

 

 

 

챕터  4-7 JOIN으로 두 테이블의 값을 연산하기


 

실습7-1 주문 가격과 수수료율을 곱하여 주문별 수수료를 구해줘

조회 컬럼 : 주문 번호, 식당 이름, 주문 가격, 수수료율, 수수료

*수수료율이 있는 경우만 조회 조회

select f.order_id,
       f.restaurant_name,
       f.price,
       p.vat,
       f.price*p.vat "수수료율"
from food_orders f inner join payments p on f.order_id=p.order_id

 

 

 

실습7-2 50세 이상 고객의 연령에 따라 경로 할인율을 적용하고, 음식 타입별로 원래 가격과 할인적용한 가격의 합을 각각 구해줘.

조회 컬럼 : 음식타입, 원래 가격, 할인 적용 가격

경로 할인 : (나이-50)*0.005 / 고객 정보가 없는 경우도 포함하여 조회 / 할인 금액이 큰 순서대로 정렬

select a.cuisine_type,
       sum(price) as "원래 가격",
       sum(price*a.할인율) as "할인 적용 가격"
FROM 
(
select f.cuisine_type,
       f.price,
       c.age,
       (c.age-50)*0.005 as "할인율"
from food_orders f left join customers c on f.customer_id=c.customer_id
where c.age>=50
) a
group by 1
order by 3 desc

 

 

 

과제

식당별 평균 음식 주문 금액과 주문자의 평균 연령을 기반으로 segmentation 하기

- 평균 음식 주문 금액 기준 : 5,000 이하 / ~10,000 / ~30,000 / 30,000 초과
- 평균 연령 : ~ 20대 / 30대 / 40대 / 50대 이상
- 두 테이블 모두에 데이터가 있는 경우만 조회, 식당 이름 순으로 오름차순 정렬

select restaurant_name,
       case when avg_price <=5000 then '그룹1_평균 5000 이하'
            when avg_price >5000 and avg_price<=10000 then '그룹2_평균 5001~10000'
            when avg_price >10000 and avg_price<30000 then '그룹3_평균 10001~30000'
            when avg_price>30000 then '그룹4_30000 초과' end '평균 음식 주문 금액 그룹',
       case when avg_age<30 then '그룹1_20대 이하'
            when avg_age between 30 and 39 then '그룹2_30대'
            when avg_age between 40 and 49 then '그룹3_40대'
            else '그룸4_50대 이상' end '평균 연령 그룹'
from
(
select f.restaurant_name,
       avg(price) 'avg_price',
       avg(age) 'avg_age'
from food_orders f inner join customers c on f.customer_id=c.customer_id
group by 1
) a
order by 1