C.W.K.
Stream
Lesson 04 of 10 · published

LEFT JOIN — 외로운 row 살리기

~12 min · joins, left-join, outer-join

Level 0Scout
0 XP0/80 lessons0/10 achievements
0/120 XP to next level120 XP to go0% complete

Outer join 은 매치 안 된 row 도 유지

LEFT JOIN 은 left 테이블 모든 row 반환, 매치 없으면 right 컬럼은 NULL. Join 이 partner 못 찾아도 한쪽 모든 row 보존하고 싶을 때.

SQLite 가 LEFT JOIN, RIGHT JOIN, FULL OUTER JOIN 다 지원. 뒤 둘은 3.39 (2022) 추가 — 옛 코드 (그리고 옛 SO 답변) 는 LEFT JOIN 두 개 UNION 으로 emulate.

Tip: LEFT JOIN ... WHERE rhs.col IS NULL 이 'A 에 있고 B 에 없는 row' 정통 패턴. 동등한 NOT EXISTS 형태보다 자연스럽게 읽힘.

Code

Author 별 post count (활성 안 한 author 0 포함)·sql
SELECT a.id, a.name, count(p.id) AS post_count
FROM   authors a
LEFT   JOIN posts p ON p.author_id = a.id
GROUP  BY a.id
ORDER  BY post_count DESC;
A 에 있고 B 에 없는 row·sql
-- 글 안 쓴 author
SELECT a.id, a.name
FROM   authors a
LEFT   JOIN posts p ON p.author_id = a.id
WHERE  p.id IS NULL;

External links

Exercise

authors+posts setup 에서 같은 논리 query 두 가지: (1) LEFT JOIN + WHERE IS NULL, (2) NOT EXISTS subquery. EXPLAIN QUERY PLAN 비교. 추가 query: 각 author 의 가장 최근 post title (없으면 NULL) — LEFT JOIN + correlated subquery 또는 window function.

Progress

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

댓글 0

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

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