한 순간에는 두 개의 데이터 집합만 조인에 참여한다는 개념으로 접근하면 여러 테이블의 조인도 비교적 쉽게 해결 할 수 있다.
Shop(매장), Ord(주문), Member(회원), 세 개의 테이블을 조인하려고 한다. 아래 내용을 기억하면서 조인을 작성해보자.
매장(Shop), 주문(Ord), 회원(Member)의 ERD를 살펴보면 다음과 같다.

세 테이블을 한 번에 조인하지 말고, 우선 Shop과 Ord만 조인해보자.
-- [SQL-7-7-1] 2019년 12월에 오픈한 매장의 2020년 전체 주문 정보 조회
-- 단 PLAT(플래티넘) 등급 회원의 주문 정보만 조회할것
-- Shop과 Ord만 조인
SELECT T1.ShopId ,T1.ShopStartYmd ,T2.OrdNo ,T2.MemberId ,T2.OrdDtm ,T2.OrdAmt
FROM startdb.Shop T1
INNER JOIN startdb.Ord T2 ON (T2.ShopId = T1.ShopId)
WHERE T1.ShopStartYmd LIKE '201912%'
AND T2.OrdDtm >= STR_TO_DATE('20200101','%Y%m%d')
AND T2.OrdDtm < STR_TO_DATE('20210101','%Y%m%d')
ORDER BY T1.ShopID ,T2.OrdNo;
ShopId ShopStartYmd OrdNo MemberId OrdDtm OrdAmt
------ ------------ ----- -------- ------------------- --------
S051 20191217 1534 M1318 2020-02-04 13:30:00 4000.000
S051 20191217 1608 M1318 2020-02-06 13:30:00 4500.000
S051 20191217 1632 M1318 2020-02-08 13:30:00 8500.000
S051 20191217 1712 M1318 2020-02-13 13:30:00 8500.000
… 생략 …
위 SQL을 통해 (Shop+Ord)라는 새로운 데이터 집합이 만들어진 것이다. 이제 이 데이터 집합에 Member를 추가로 조인하면 된다. Ord에 조인을 추가하는 것이 아니라 (Shop+Ord) 데이터 집합에 조인을 추가하는 것이다. (Shop+Ord) 데이터 집합에는 MemberId가 있으며, MemberId는 Member 테이블의 PK다. 그러므로 MemberId 컬럼을 이용해 두 데이터 집합을 조인처리하면 된다. 다음과 같다.
-- [SQL-7-7-2] 2019년 12월에 오픈한 매장의 2020년 전체 주문 정보 조회, 회원 정보도 필요
-- 단 PLAT(플래티넘) 등급 회원의 주문 정보만 조회할것
-- Member 조인 추가
SELECT T1.ShopId ,T1.ShopStartYmd ,T2.OrdNo ,T2.MemberId ,T2.OrdDtm ,T2.OrdAmt
,T3.NickNm ,T3.MemberGd
FROM startdb.Shop T1
INNER JOIN startdb.Ord T2 ON (T2.ShopId = T1.ShopId)
INNER JOIN startdb.Member T3 ON (T3.MemberId = T2.MemberId)
WHERE T1.ShopStartYmd LIKE '201912%'
AND T2.OrdDtm >= STR_TO_DATE('20200101','%Y%m%d')
AND T2.OrdDtm < STR_TO_DATE('20210101','%Y%m%d')
AND T3.MemberGD = 'PLAT'
ORDER BY T1.ShopID ,T2.OrdNo;