본문 바로가기

데이터 교육/SQL

[SQL] 08. join절

출처: 패스트 캠퍼스 - 한 번에 끝내는 데이터 분석 초격차 패키지 Online.


데이터 연결: join절

join 테이블명 (as) b on a.컬럼명 = b.컬럼명


목차
1. join절이란
2. join절 특징
3. 데이터 탐색: 파일 삽입 및 파일명 변경
4. 데이터 연결: 상품별 매출액 (join절)
5. 데이터 이중 연결: 카테고리별 매출액 (join절 2번)
6. 기타 예제

 

1. join절이란: join절 문법 쿼리

 

on a.컬럼명x = b.컬럼명y 해석

: a테이블의 x라는 컬럼 b테이블의 y컬럼으로 join할거야

 

 


 

2. join절의 특징

01) join절의 유형

(inner) join

left join >>> null값이 포함

 


 

02) join 주의 사항

1) 행 중복: 중복값이 있으면 조인 결과 중복이 발생한다 > 중복값은 알아서 관리해야 한다

2) on절 실수: '=등호'를 빼지 않고 꼭 써야한다

 

 

 


3. 데이터 탐색

a) 실습2 에 필요한 데이터 파일들(order, item, category, user)을 전부 가져옵니다 

 

 

b) 변경이 필요한 테이블들의 이름을 바꿔줍니다

order > online_order

user > user_info

 

 

c) 테이블 별 정보

주문 테이블: 매출액 상품 테이블: 상품이름 카테고리 테이블 유저 테이블
select *
from online_order
select *
from item
select *
from category
select *
from user_info

 

 


 

4. 데이터 연결: 상품별 매출액 확인

*상품별 매출액 =주문 테이블(online_order) 상품 테이블(item)의 연결이 필요

주문 테이블: 매출액 정보 상품 테이블: 상품이름 정보
select *
from online_order
select *
from item

 

 

* online_order 테이블에서 매출액 높은 순으로 정렬하기
select itemid, sum(gmv) as gmv
from online_order oo
group by 1

> online_order에는 상품이름(=item) 컬럼이 없고, 상품id(=itemid) 컬럼만 존재

> 따라서 실제 상품 이름(=item)을 상품id(itemid)를 통해  join으로 확인해야함.

 


 

Q) 상품 별 매출액은 어떻게 될까? > 상품 별로 가장 많이 팔린 것은 '동안 연출 깜찍 원피스'

** 상품이름을 상품ID와 나란히 놓아서 한눈에 상품별 매출액을 확인 하자.

select i.item_name, sum(gmv) as gmv

from online_order oo

join item i on oo.itemid = i.id   >>> 해석: oo테이블의 itemid(상품아이디)i테이블의 id(상품이름)로 join할거야

group by 1

order by 2 desc

 

 


 

5. 데이터 이중 연결: 카테고리별 매출액

*카테고리별 매출 = 3개의 테이블 연결 필요 (join 2번 사용)

주문 테이블: 매출액 상품 테이블: 상품이름 카테고리 테이블
select *
from online_order
select *
from item
select *
from category

 

 

Q) 카테고리별 매출액은 어떻게 될까? > 카테고리 별로 가장 많이 팔린 상품은 스커트

select c.cate1, c.cate2, c.cate3, sum(gmv) as gmv

from online_order oo

join item i on oo.itemid = i.id

join category c on i.category_id = c.id

group by 1,2,3

order by 4 desc

 

 


 

4. 기타 예제

* 성연령 분석: 테이블 정보

주문 테이블: 매출액 유저 테이블
select *
from online_order
select *
from user_info

 

 

Q) 성/연령별 매출액은 어떻게 될까? > [여성/20-24]의 구매율이 가장 높았다

select ui.gender, ui.age_band, sum(gmv) as gmv

from online_order oo

join user_info ui on oo.userid = ui.userid

group by 1,2

order by 1,2

 


cf. join절과 where절을 같이 쓸 때

join은 항상 from 바로 다음!

'데이터 교육 > SQL' 카테고리의 다른 글

[SQL] 10. case when절  (0) 2023.05.29
[SQL] 09. 원하는 형식으로 컬럼 가공하기  (0) 2023.05.29
SQL 기본 문법 정리  (0) 2023.05.24
[SQL] 06. having 절  (0) 2023.05.24
[SQL] 05. group by절, 집계 함수  (0) 2023.05.23