본문 바로가기
C.W.K.
Stream
Lesson 12 of 16 · published

RIGHT, FULL, 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은 오른쪽 테이블의 모든 행을 남겨. 대부분은 테이블 순서를 바꿔 LEFT JOIN으로 쓰면 읽는 방향이 자연스러워지지만, 논리 자체는 알아둬야 해.

FULL JOIN은 양쪽의 빠진 짝까지 보여줘

양쪽 모두를 보존하고 짝이 없는 자리를 NULL로 채워. 서로 다른 두 목록을 대조하거나 이전 상태와 새 상태를 맞출 때 쓸 수 있어.

CROSS JOIN은 가능한 조합을 모두 만든다

연결 조건 없이 양쪽 행의 곱을 만들어. 색상과 크기 조합 같은 의도된 경우에는 유용하지만, 조건을 빠뜨려 생기면 결과가 폭발해. 의도하지 않은 CROSS JOIN은 결과를 5천만 행까지 폭발시킬 수 있으니, 양쪽 행 수를 곱해 결과 규모를 계산한 뒤 써.

Code

데이터 대조를 위한 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

서로 같은 행을 가져야 하는 테이블 2개를 골라 실제 데이터 대조 문제를 정해. 차이를 드러내는 FULL JOIN을 작성해 실행하고 예상 밖의 행 하나를 조사해.

Progress

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

댓글 0

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

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