본문 바로가기
Data

[SQL] 서브쿼리/Join 함수 엑셀보다 쉽고 빠른 SQL 4주차 강의 정리

by Dora the explorer 2024. 9. 2.
반응형

🥑 오늘 배운 것

 

- Subquery 서브쿼리 문

여러번의 연산을 수행해야 하는 경우, 조건문에 연산 결과를 사용해야 할 때, 조건에 쿼리 결과를 사용하고 싶을 때 등 여러 연산을 효율적으로 수행할 수 있다.

쿼리 안에 서브로 들어간 구문이라고 생각하면 된다.

괄호로 지정하고 서브쿼리의 별명을 만들어 주어야 한다.

select column1, special_column
from
 **(** /* subquery */
 select column1, column2 special_column
 from table1
 **) a**

 

 

-서브쿼리를 활용한 User Segmentation

select restaurant_name,
 price_per_plate*ratio_of_add "수수료"
from
(
select restaurant_name,
 case when price_per_plate<5000 then 0.005
 when price_per_plate between 5000 and 19999 then 0.01
 when price_per_plate between 20000 and 29999 then 0.02
 else 0.03 end ratio_of_add,
 price_per_plate
from
(
select restaurant_name, avg(price/quantity) price_per_plate
from food_orders
group by 1
) a
) b
  1. 서브쿼리 a : 레스토랑 이름, 평균 단가(price/quantity)를 price_per_plate로 지정
  2. 서브쿼리 b : 서브쿼리 a의 price_per_plate 의 가격에 따라 수수료율 적용
  3. 계산된 결과를 다시 사용하여 수수료 계산

단계별로 계산하는 식을 적어줌으로서 복잡한 연산을 쉽게 적어줄 수 있다.

 

 

-음식점의 지역과 평균 배달시간으로 segmentation 하기

지역조건 : 전체주소가 아닌 앞 두글자(시도)만 [시도]

평균배달시간 조건 : 20분 이하/20~30분/30분초과

 

 

-JOIN 함수

데이터가 있는 테이블이 다를 때 각 테이블에서 정보를 가져올 수 있다.

엑셀 Vlookup과 유사한 원리를 가진 기능이지만 나는 엑셀을 많이 사용할 일이 없어서 해당 기능 사용해 본 적은 없다.

 

조인하는 방법

LEFT JOIN : 공통컬럼을 기준으로 하나의 테이블에 값이 없더라도 모두 조회

INNER JOIN : 공통컬럼을 기준으로 테이블 모두에 있는 값만 조회

-- LEFT JOIN
select 조회 할 컬럼
from 테이블1 a left join 테이블2 b on a.공통컬럼명=b.공통컬럼명

-- INNER JOIN
select 조회 할 컬럼
from 테이블1 a inner join 테이블2 b on a.공통컬럼명=b.공통컬럼명

 

 

-고객의 주문 식당 조회하기

(조회 컬럼 : 고객 이름, 연령, 성별, 주문식당) *고객명으로 정렬하고, 중복이 없도록 조회

select distinct a.name ,
a.age,
a.gender,
b.restaurant_name 
FROM customers a inner join food_orders b on a.customer_id=b.customer_id

중복되는 값이 없도록 distinct를 사용하여 중복값을 제거해준다.

 

 

🥑 적용


1~3강에서 다룬 내용을 가지고 실습하는 내용이 대부분이다. 분명히 다뤘던 내용인데 벌써 기억이 나지 않는 것들이 몇개 있었다.

체크해두고 개념을 다시 이해하려고 노력했따. 세그멘테이션을 하는 것이 어렵지는 않지만 조금 귀찮은 과정이라 더 쉽게 하는 방법이 있으면 알고싶다!

반응형