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

INNER JOIN: 테이블 꿰매기

~14 min · queries, joins

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

매치메이킹 댄스

INNER JOIN 이 두 테이블을 공유 키로 결합. 테이블 모두에 매치 있는 행만 살아남음. 유저가 주문 없으면 안 나옴. 주문이 매치 유저 없으면 (FK orphan) 그것도 안 나옴.

ON 절

ON 절이 매치 정의 — 보통 foreign_key = primary_key. 다중 조건 OK: ON o.user_id = u.id AND o.status = 'paid'. 오른쪽 테이블 언급 필터는 나중에 LEFT JOIN semantics 원하면 ON 에 — LEFT JOIN 레슨 참조.

Multi-table join

JOIN 체인으로 관계 traverse: user → order → line_item → product. PostgreSQL planner 가 성능 위해 join 재정렬 영리하게 — 너 일은 join 명확히 작성.

Code

두 테이블 INNER JOIN·sql
SELECT u.name, o.id AS order_id, o.total, o.placed_at
FROM   users u
INNER JOIN orders o ON o.user_id = u.id
WHERE  o.placed_at >= now() - INTERVAL '30 days'
ORDER  BY o.placed_at DESC;
Multi-table chain·sql
SELECT u.name, o.id AS order_id, p.title, li.quantity, li.unit_price
FROM   users u
INNER JOIN orders     o  ON o.user_id   = u.id
INNER JOIN line_items li ON li.order_id = o.id
INNER JOIN products   p  ON p.id        = li.product_id
ORDER  BY o.placed_at DESC, li.id;
INNER JOIN 을 USING 으로·sql
-- USING (col) 이 양 테이블에 같은 이름 컬럼 요구
-- + SELECT 에 어느 테이블 컬럼 나오는지 모호함 회피.
SELECT u.name, o.id AS order_id
FROM   users u
INNER JOIN orders o USING (user_id);  -- 둘 다 user_id 있어야 동작

External links

Exercise

4-테이블 JOIN: users → orders → order_items → products. 지난달 필터, total 내림차순 정렬, 유저 이름 + product 이름 + line total 반환.

Progress

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

댓글 0

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

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