C.W.K.
Stream
Lesson 12 of 16 · published

RIGHT JOIN, FULL JOIN, CROSS JOIN

~10 min · queries, joins

Level 0스키마 새싹
0 XP0/86 lessons0/10 achievements
0/120 XP to next level120 XP to go0% complete

RIGHT JOIN 은 LEFT JOIN 거꾸로

RIGHT JOIN 이 오른쪽 테이블 모든 행 보존. 실제로 RIGHT JOIN 거의 안 씀 — 테이블 순서 뒤집고 LEFT JOIN, 더 자연스럽게 읽힘 (관심 있는 테이블이 먼저).

FULL JOIN — 양쪽 유지

FULL JOIN 이 테이블 모든 행 보존, 매치 없으면 NULL 채움. 킬러 use case 는 데이터 reconciliation: 양쪽에 뭐 빠졌는지 보고 싶은 두 데이터셋 비교.

CROSS JOIN — 모든 행 × 모든 행

CROSS JOIN 이 데카르트 곱 생성. 조합 생성 (모든 product × 모든 region) 또는 시계열 누락 행 채우기에 유용. 필요 없으면 스킵; 우발적 CROSS JOIN 이 5천만 행 쿼리 배포하는 방법.

Code

Reconciliation 위한 FULL JOIN·sql
SELECT
    a.date AS accounting_date,
    a.revenue AS accounting_revenue,
    s.date AS sales_date,
    s.revenue AS sales_revenue
FROM   accounting_report a
FULL JOIN sales_report  s ON a.date = s.date
WHERE  a.date IS NULL OR s.date IS NULL;
-- 한쪽에만 존재하는 날짜 반환.
조합 생성 위한 CROSS JOIN·sql
-- 모든 (product, region) 쌍, 매출 없는 것도 포함
SELECT p.name, r.name, COALESCE(SUM(s.amount), 0) AS revenue
FROM   products p
CROSS JOIN regions r
LEFT JOIN sales s ON s.product_id = p.id AND s.region_id = r.id
GROUP  BY p.name, r.name;

External links

Exercise

실제 reconciliation 문제 — 매치 행 가져야 할 두 테이블. discrepancy 표면화하는 FULL JOIN 작성. 실행; 놀라는 행 하나 조사.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.