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 연습을 병행해야겠다.