AI SCHOOL/SQL

[SQL] JOIN

moru_xz 2023. 1. 26. 15:41

1. JOIN

https://no.wikipedia.org/wiki/Join_%28SQL%29

select order_id, product_id, name
from `weniv.weniv_order`
join `weniv.weniv_product`
on `weniv.weniv_order`.product_id = `weniv.weniv_product`.id
select order_id, product_id, name
from `weniv.weniv_order` as o
join `weniv.weniv_product` as p
on o.product_id = p.id

2. INNER JOIN

두 테이블 모두에서 일치하는 값이 있는 행 반환

select table1.id, table2.id
from table1
[inner] join table2 
	on table2.id=table1.id
select 
	o.order_id, 
	o.product_id,
	p.name,
	o.created_at
from `weniv.weniv_order` as o
join `weniv.weniv_product` as p 
on o.product_id = p.id

 

3. LEFT JOIN

- 왼쪽 조인은 오른쪽 테이블의 해당 행과 함께 왼쪽 테이블의 모든 행을 반환

- 일치하는 행이 없으면 NULL이 두 번째 테이블의 값으로 반환

select table1.id, table2.id
from table1
left [outer] join table2
on table2.id = table1.id
select 
  t1.order_id,
  t1.created_at,
  t2.name,
  t2.city,
  t1.product_id,
  t3.name as product_name
from `weniv.weniv_order` t1
left join `weniv.weniv_user` t2 on t1.user_id = t2.id
left join `weniv.weniv_product` t3 on t1.product_id = t3.id
where t2.city = 'Jeju'

4. RIGHT JOIN

select table1.id,table2.id
from table1
right [outer] join table2
on table2.id=table1.id
select 
	orders.order_id, 
	orders.created_at,
	users.name as user_name
from `weniv.weniv_order` as orders
right join `weniv.weniv_user` as users 
	on orders.user_id = users.id
order by user_name

5. FULL JOIN

전체 조인은 두 번째 테이블에 일치하는 행이 없으면 두 테이블의 모든 행을 반환하고 NULL이 반환

select table1.id,table2.id
from table1
full [outer] join table2
on table2.id=table1.id
select 
	orders.order_id, 
	orders.created_at,
	users.name
from `weniv.weniv_order` as orders
full join `weniv.weniv_user` as users
on orders.user_id = users.id
order by order_id

-> 잘 사용하지 않음

 

6. CROSS JOIN

- 교차 조인은 두 테이블에서 가능한 모든 행 조합을 반환

select table1.id, table2.id
from table1
cross join table2


select table1.id,table2.id
from table1, table2

동일
select 
	users.name as user_name, 
	products.name as product_name
from `weniv.weniv_product` as products
cross join `weniv.weniv_user` as users
order by user_name, product_name

 

 

 

 

+)

트랜잭션 데이터(transaction data)

트랜잭션 데이터는 다양한 애플리케이션에서 일상적인 비즈니스 프로세스를 실행하거나 지원할 때 생성되는 데이터

  • 주문 데이터

마스터 데이터(master data)

마스터 데이터는 트랜잭션에서 참고되는 각종 정보

  • 회원데이터
  • 상품데이터

분석 데이터

분석데이터는 트랜젝션 데이터에 대한 계산 또는 분석을 통해 생성되는 데이터

  • 통계 데이터

트랜잭션 데이터 + 마스터 데이터 결합시켜서 데이터 마트 

주문 + 유저 + 상품

SELECT T1.order_id,
T1. user_id,
T2.name AS USER_NAME,
T2.age AS USER_AGE,
T2.city AS USER_CITY,
T2.postal_code AS USER_POSTAL_CODE,
T1.created_at AS ORDER_CREATED_AT, 
T1. num_of_item,
T1.product_id,
T3.name AS PRODUCT_NAME,
T3.COST AS PRODUCT_COST
FROM `weniv.weniv_order` AS T1
LEFT JOIN `weniv.weniv_user`AS T2 ON T1.user_id = T2.id
LEFT JOIN `weniv.weniv_product` AS T3 ON T1.product_id = T3.id