0Pricing
SQL Interview Prep · 강의

세 개 이상의 표 JOIN하기

JOIN을 연결하고 중간 결과 집합을 추론합니다.

세 개 이상의 표 JOIN하기은(는) CoddyKit의 무료 SQL Interview Prep 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 SQL Interview Prep 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. SQL Interview Prep 강의에는 총 4개의 강의가 포함되어 있습니다.

조인은 분기가 아니라 연쇄입니다

실제 면접 문제는 두 테이블에서 끝나는 경우가 드뭅니다. 세 개, 네 개 또는 그 이상의 테이블을 조인하라는 요청을 받게 됩니다. 혼란을 줄여 주는 핵심 통찰은 다중 테이블 조인이 두 테이블 조인을 차례로 수행하는 것이라는 점입니다.

데이터베이스는 처음 두 테이블을 조인하여 중간 결과를 만든 다음, 그 결과를 세 번째 테이블과 조인하는 식으로 계속 진행합니다. 하나의 조인을 추론할 수 있다면 이러한 조인의 연쇄도 추론할 수 있습니다.

세 테이블 구조

예제에 세 번째 테이블을 추가해 확장해 보겠습니다. 이제 고객, 고객의 주문, 그리고 각 주문이 참조하는 상품이 있습니다.

  • customers(id, name)
  • orders(id, customer_id, product_id, amount)
  • products(id, title)

두 관계가 이들을 연결합니다. orders.customer_id = customers.id와 orders.product_id = products.id입니다.

customers(id, name)
orders(id, customer_id, product_id, amount)
products(id, title)

기본 세 테이블 질의

조인을 차례로 이어 붙입니다. 각 JOIN ... ON은 테이블을 하나 추가하고, 앞에서 추가한 내용과 어떻게 연결되는지 지정합니다.

위에서 아래로 읽어 보십시오. 주문 테이블에서 시작해 일치하는 고객을 연결한 다음, 일치하는 상품을 연결합니다. 모든 주문 행에 고객 이름과 상품 제목이 추가됩니다.

SELECT c.name, p.title, o.amount
FROM orders o
JOIN customers c ON c.id = o.customer_id
JOIN products  p ON p.id = o.product_id;

중간 결과 집합으로 생각하기

여러 테이블 조인을 쉽게 이해하게 해 주는 사고방식은 각 JOIN 뒤에 지금까지의 중간 결과를 떠올리는 것입니다.

  • 조인 1 후: 주문 열 + 고객 열
  • 조인 2 후: 해당 결과 + 상품 열

다음 ON 절에서는 중간 집합에 이미 포함된 열을 모두 참조할 수 있습니다. 따라서 조인 순서에 따라 각 ON 절에 작성할 수 있는 내용이 달라집니다.

각 ON 절은 앞선 테이블을 참조합니다

여기서 중요한 결과가 하나 있습니다. 뒤에 나오는 조인의 ON 절에서는 자기보다 앞에서 조인된 모든 테이블을 참조할 수 있으며, 추가되는 테이블만 참조할 수 있는 것은 아닙니다.

이 예제에서 세 번째 조인은 이미 참조 범위에 들어온 주문 테이블인 o에 연결됩니다. 네 번째 테이블을 c 또는 p에 연결할 수도 있습니다. 두 테이블 모두 현재까지의 결과에 이미 포함되어 있기 때문입니다.

SELECT c.name, p.title, w.region
FROM orders o
JOIN customers c ON c.id = o.customer_id
JOIN products  p ON p.id = o.product_id
JOIN warehouses w ON w.id = o.warehouse_id; -- refers to o

중앙 테이블에서 시작하기

실시간 면접을 위한 실용적인 팁은 FROM에서 기준/중앙 테이블(대개 관계의 가운데에 있는 테이블)부터 시작한 다음 조회 테이블을 바깥쪽으로 연결해 나가는 것입니다.

주문 테이블은 고객과 상품 양쪽을 가리키는 외래 키를 보유하므로 가운데에 있습니다. 따라서 여기서 시작하면 모든 ON 절을 단순하게 작성하고 앞에서 나온 대상을 참조할 수 있습니다.

-- orders is central: it links to both sides
FROM orders o
JOIN customers c ON c.id = o.customer_id
JOIN products  p ON p.id = o.product_id

연쇄 조인에서 행 증식이 누적됩니다

행 증식에 관해 배운 내용은 여전히 적용되며, 여러 단계에서 누적됩니다. 주문마다 여러 항목이 있고 각 항목마다 여러 세금 행이 있다면, 각 단계에서 행 수가 곱으로 늘어납니다.

여러 조인이 있는 질의에서 집계 결과가 지나치게 크다면, 중간 조인 중 하나에서 발생한 행 증식을 의심하고 각 조인의 데이터 단위를 개별적으로 확인하십시오.

-- rows = orders * items_per_order * tax_rows_per_item
SELECT o.id
FROM orders o
JOIN order_items i ON i.order_id = o.id
JOIN item_taxes  t ON t.item_id  = i.id;

연쇄 조인에서 조인 유형 섞기

하나의 질의에서 INNER 조인과 LEFT 조인을 함께 사용할 수 있지만 순서가 중요합니다. LEFT JOIN이 NULL을 만들고 나면, 그 NULL 열을 참조하는 뒤의 INNER JOIN이 보존된 행을 제거할 수 있습니다.

여기서는 주문이 없는 고객을 LEFT JOIN이 NULL product_id와 함께 유지하지만, 이어지는 상품 테이블과의 INNER JOIN이 그 고객을 다시 제거합니다. 긴장되는 상황에서 쉽게 저지를 수 있는 실수입니다.

SELECT c.name, p.title
FROM customers c
LEFT JOIN orders  o ON o.customer_id = c.id
JOIN products p ON p.id = o.product_id;
-- the INNER products join can cancel the LEFT JOIN

외부 조인을 끝까지 외부 조인으로 유지하기

주문이 없는 고객을 마지막까지 보존하려면 뒤따르는 조인도 LEFT로 만드십시오. 그러면 NULL 값이 안전하게 마지막까지 전달됩니다.

경험칙은 다음과 같습니다. 한 번 외부 조인을 사용했다면, 선택적 분기에 매달린 모든 테이블에도 계속 외부 조인을 사용하십시오.

SELECT c.name, p.title
FROM customers c
LEFT JOIN orders   o ON o.customer_id = c.id
LEFT JOIN products p ON p.id = o.product_id;
-- customers with no orders are now kept (NULL title)

규모가 커지면 별칭이 필수입니다

테이블이 네다섯 개가 되면 여러 테이블에 id, name, created_at처럼 같은 이름의 열이 있을 수 있습니다. 짧고 일관된 별칭을 사용하면 모호함을 없애고 질의를 읽기 쉽게 만들 수 있습니다.

테이블을 연상할 수 있는 별칭(c, o, p)을 정하고 모든 열에 테이블 별칭을 붙이십시오. 면접관은 별칭을 사용하는 방식에서 실무 SQL을 작성하는 방식을 파악합니다.

SELECT c.id   AS customer_id,
       o.id   AS order_id,
       p.id   AS product_id,
       p.title
FROM orders o
JOIN customers c ON c.id = o.customer_id
JOIN products  p ON p.id = o.product_id;

다대다 관계를 위한 연결 테이블

두 개체가 다대다 관계를 맺을 때는 세 번째 연결 테이블이 둘 사이에 놓이며, 이 테이블을 거쳐 조인합니다. 학생과 강좌는 등록 정보를 통해 연결됩니다.

연결 테이블을 거쳐야 한다는 점을 알아보는 것 자체가 면접에서 자주 확인하는 능력입니다.

SELECT s.name, c.title
FROM students s
JOIN enrollments e ON e.student_id = s.id
JOIN courses     c ON c.id = e.course_id;

간단한 확인

여러 조인 유형이 섞인 연쇄 조인을 분석해 보십시오.

요약: 세 개 이상의 테이블 조인

면접에서 다음 내용을 기억하십시오.

  • 여러 테이블 조인은 두 테이블 조인이 이어진 연쇄입니다. 각 단계 뒤의 중간 결과를 기준으로 생각하십시오.
  • 뒤에 나오는 ON 절에서는 연쇄에 포함된 앞선 테이블을 모두 참조할 수 있습니다.
  • 중앙 테이블에서 시작해 조회 테이블로 확장하십시오.
  • 행 증식은 조인마다 누적되므로 각 단계의 데이터 단위를 확인하십시오.
  • LEFT JOIN 뒤의 INNER JOIN은 LEFT JOIN을 무효화할 수 있습니다. 선택적 행을 유지하려면 계속 외부 조인을 사용하십시오.
  • 다대다 관계는 연결 테이블을 통해 조인합니다.

자주 묻는 질문

“세 개 이상의 표 JOIN하기” 강의는 무료인가요?

네 — “세 개 이상의 표 JOIN하기” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 SQL Interview Prep 강의 전체를 잠금 해제할 수 있습니다. SQL Interview Prep 강의에는 총 4개의 강의가 포함되어 있습니다.

“세 개 이상의 표 JOIN하기”에서 뭘 배우나요?

JOIN을 연결하고 중간 결과 집합을 추론합니다. 브라우저에서 직접 실행하는 실습 코드로 SQL Interview Prep을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

SQL Interview Prep을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 SQL Interview Prep은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.

“세 개 이상의 표 JOIN하기” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 SQL Interview Prep 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 SQL Interview Prep 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. INNER JOIN이 행을 일치시키는 방식
  2. JOIN에서 ON과 WHERE 비교하기
  3. JOIN의 확장과 행 복제
  4. 세 개 이상의 표 JOIN하기
← SQL Interview Prep(으)로 돌아가기