[ 조인 ]
2개 이상의 테이블을 연결 또는 결합하여
데이터를 출력하는 것을 조인(Join)이라고 하며
일반적으로 사용되는 SQL문의 상당수가
조인으로 이루어져 있다.
일반적인 경우 기본키와 외래키의
값 연관에 의해 조인이 이루어지며
기본키, 외래키 관계와는 별도로
일반 칼럼끼리 조인이 이루어지기도 한다.
- INNER JOIN
양쪽 테이블에 매칭되는 데이터만 나온다. - LEFT JOIN
왼쪽 테이블은 전부 유지,
오른쪽은 있으면 붙고 없으면 NULL로 나온다.
[ 2개 테이블 조인 ]
1) 회원 + 주문 (INNER JOIN)
'누가 언제 얼마를 주문했는지' 같이
연관된 데이터만 가져오고 싶을 때.
/*
[목표]
- member(회원)과 orders(주문)을 member_id로 연결
- 주문이 있는 회원의 주문 정보만 조회 (INNER JOIN)
[포인트]
- JOIN 조건은 ON에 작성한다.
- INNER JOIN은 매칭되는 행만 나온다.
*/
SELECT
m.member_id, -- 회원 PK
m.name, -- 회원 이름
o.order_id, -- 주문 PK
o.order_dt, -- 주문일
o.total_amount -- 주문 총액
FROM member m
JOIN orders o
ON o.member_id = m.member_id -- 주문의 member_id가 회원의 member_id와 같을 때 연결
WHERE o.order_dt >= '2026-01-01' -- 기간 필터: 2026-01-01 이후 주문만
ORDER BY o.order_dt DESC; -- 최신 주문부터
2) 회원은 다 보여주고, 주문은 있으면 붙이기 (LEFT JOIN)
'전체 회원 목록 + 주문 여부'처럼
주문 없는 회원도 포함해야 할 때.
/*
[목표]
- 회원은 전부 조회하고, 주문은 있는 경우에만 붙인다 (LEFT JOIN)
[포인트]
- LEFT JOIN은 왼쪽 테이블(member)을 기준으로 "무조건 유지"
- 주문이 없는 회원은 orders 컬럼들이 NULL로 나온다
*/
SELECT
m.member_id,
m.name,
o.order_id, -- 주문이 없으면 NULL
o.order_dt -- 주문이 없으면 NULL
FROM member m
LEFT JOIN orders o
ON o.member_id = m.member_id
ORDER BY m.member_id;
[ 3개 테이블 조인 ]
회원 + 주문 + 주문상세 (라인 단위 조회)
주문 1건에는 상품이 여러 개 들어가므로,
order_detail까지 붙이면 “주문 라인” 단위로 행이 늘어난다.
/*
[목표]
- 회원(member) → 주문(orders) → 주문상세(order_detail)까지 연결
- 어떤 회원이 어떤 주문에서 어떤 상품을 몇 개/얼마에 샀는지 (라인 단위)
[관계]
member 1 : N orders
orders 1 : N order_detail
[포인트]
- order_detail을 붙이면 "주문 1건이 여러 행으로 늘어날 수 있음"
*/
SELECT
m.member_id,
m.name,
o.order_id,
o.order_dt,
od.product_id, -- 주문 라인의 상품 ID
od.qty, -- 주문 수량
od.unit_price, -- 단가
(od.qty * od.unit_price) AS line_amount -- 라인 금액(수량*단가)
FROM member m
JOIN orders o
ON o.member_id = m.member_id
JOIN order_detail od
ON od.order_id = o.order_id -- 주문 PK로 주문상세 연결
WHERE o.order_dt >= '2026-01-01'
ORDER BY o.order_id DESC, od.product_id;
[ 4개 테이블 조인 ]
회원 + 주문 + 주문상세 + 상품 (상품명까지)
product_id만 있으면 사람이 보기 불편하니까,
상품 테이블을 붙여서 상품명까지 완성한다.
/*
[목표]
- 회원 → 주문 → 주문상세 → 상품까지 연결
- 결과를 사람이 읽기 좋게 "상품명" 포함해서 출력
[관계]
order_detail.product_id → product.product_id
[포인트]
- 4개 조인은 "라인 데이터 + 부가 정보(상품명)"를 풍부하게 만들 때 많이 씀
*/
SELECT
m.member_id,
m.name,
o.order_id,
o.order_dt,
p.product_id,
p.product_name, -- 상품명
od.qty,
od.unit_price,
(od.qty * od.unit_price) AS line_amount
FROM member m
JOIN orders o
ON o.member_id = m.member_id
JOIN order_detail od
ON od.order_id = o.order_id
JOIN product p
ON p.product_id = od.product_id -- 상품ID로 상품 테이블 연결
WHERE o.order_dt >= '2026-01-01'
ORDER BY o.order_id DESC, p.product_name;'개주 훈련일지 > 📚 코살대 교본 학습' 카테고리의 다른 글
| SQL) 표준 조인 (0) | 2026.01.24 |
|---|---|
| 동적 모델링 (1) | 2026.01.21 |
| SQL) ORDER BY절 (0) | 2026.01.17 |
| 정적 모델링 (0) | 2026.01.17 |
| UML (Unified Modeling Language) (0) | 2026.01.15 |