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

다중 테이블 join + Self-join

~14 min · joins, self-join, multi-table

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

3 테이블 이상

2+ 테이블 join 은 그냥 chain — SQLite 가 left to right. 3+ 테이블이면 alias 필수, 긴 unaliased 이름은 곧 못 읽음.

Self-join = 같은 테이블을 alias 두 개로 join. 계층 데이터 (parent/child, manager/employee), 한 hop graph traversal, pairwise 비교에 자연스러운 모양.

Tip: 재귀 계층 (임의 depth) 는 WITH RECURSIVE CTE (track 8). Self-join 은 한 레벨 처리. 깊은 트리는 재귀 CTE 형태 더 일반적이고 SQLite 가 잘 최적화.

Code

Alias 와 함께 3 테이블 join·sql
SELECT c.id, c.title,
       u.username AS owner,
       count(m.id) AS n_messages
FROM   conversations c
INNER  JOIN users u    ON u.id = c.owner_id
LEFT   JOIN messages m ON m.conversation_id = c.id
GROUP  BY c.id, u.username
ORDER  BY n_messages DESC LIMIT 10;
Self-join — 같은 이메일 도메인 user 찾기·sql
SELECT u1.username AS a, u2.username AS b,
       substr(u1.email, instr(u1.email, '@')+1) AS domain
FROM   users u1
INNER  JOIN users u2
       ON substr(u1.email, instr(u1.email, '@')+1)
        = substr(u2.email, instr(u2.email, '@')+1)
       AND u1.id < u2.id;

External links

Exercise

작은 조직도 모델: employees(id, name, manager_id), manager_id 가 self-FK. 3 레벨 트리 employee 10 명 insert. Self-join 으로 각 employee 와 직속 manager 이름 pair. CEO 까지 전체 path 반환은 어떻게? 재귀 CTE 가 더 잘 읽히는지 생각.

Progress

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

댓글 0

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

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