SQL
테이블 결합: JOIN, UNION, WITH
minazuki
2024. 3. 5. 11:49
3주차
SQL 쿼리 문법을 활용하여 데이터 분석을 진행하기(2)
학습 주제: 여러 테이블 결합하여 사용하기
쿼리 활용 예시
JOIN
FULL OUTER JOIN
SELECT orders.*, clk_index
FROM clicks LEFT JOIN orders
on clicks.user_name = orders.user_name
and clicks.product_id = orders.product_id
and clicks.date = orders.date
UNION
SELECT orders.*, clk_index
FROM clicks RIGHT JOIN orders
on clicks.user_name = orders.user_name
and clicks.product_id = orders.product_id
and clicks.date = orders.date
CROSS JOIN(=Cartesian product)
SELECT clicks.*, odr_index,
orders.product_id as
odr_product_id,
orders.user_name as
odr_user_name,
orders.date as odr_date
FROM clicks CROSS JOIN orders
SELF JOIN
SELECT m1.*, m2.id as sub_id,
m2.name as sub_name
FROM managers_v2 m1 INNER JOIN
managers_v2 m2
ON m1.substitute = m2.id
UNION
SELECT category
FROM products
UNION ALL
SELECT category
FROM products_B
WITH
WITH user_orders as (
SELECT user_name, SUM(price) as total_purchase
FROM orders o INNER JOIN products p on o.product_id = p.product_id
GROUP BY 1
ORDER BY 2 DESC
)
SELECT user_orders.*
FROM user_orders uo INNER JOIN managers m ON
uo.user_name = m.user_name
- CTE (Common Table Expression) 라고도 부르며, MySQL 8.0 버전 이상에서 지원
- 임시 결과 집합을 생성하여 복잡한 쿼리를 쉽게 작성할 수 있도록 돕는 기능
- 복잡한 쿼리에서 하위 쿼리를 사용해 같은 결과를 여러 번 계산해야 하는 경우를 줄여 줌.
공부하며 어려웠던 내용
아직 크게 어려운 부분은 없으나 막상 직접 WITH 쿼리를 써보라고 하면 손이 잘 움직이지 않을 것 같다. 프로그래머스의 코딩테스트 페이지에서 SQL 연습을 병행해야겠다.