0Pricing
Coding Interview Prep · 강의

INNER JOIN이 행을 일치시키는 방식

모든 JOIN 질문을 쉽게 이해하게 해 주는 행 쌍 모델을 익힙니다.

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

면접관이 묻는 첫 JOIN

면접관이 "이 두 테이블을 JOIN하세요"라고 말하면 거의 항상 INNER JOIN을 의미합니다. 이는 기본 JOIN이며, 행이 어떻게 짝지어지는지 정말 이해하고 있는지를 확인할 수 있는 JOIN입니다.

전체 내용은 다음 한 문장으로 요약됩니다. INNER JOIN은 두 테이블에서 만들 수 있는 모든 행의 쌍을 살펴보고 ON 조건을 만족하는 쌍만 남깁니다. 일치하는 쌍이 없으면 해당 행은 결과에서 사라집니다.

이 정신 모델을 확실히 익히면 더 어려운 JOIN 문제도 모두 쉬워집니다.

살펴볼 두 테이블

이 단원 전체에서는 작은 테이블 두 개를 사용합니다. 고객 테이블에는 주문을 한 사람이 저장되고, 주문 테이블에는 해당 고객과 연결된 각 주문이 기록됩니다.

  • customers(id, name)
  • orders(id, customer_id, amount)

두 테이블을 연결하는 조건은 orders.customer_id = customers.id입니다. 이 동등 조건이 전체 결과를 결정하는 JOIN 조건식입니다.

customers
id | name
1  | Ada
2  | Bob
3  | Cleo   -- no orders yet

orders
id | customer_id | amount
10 | 1           | 50
11 | 1           | 20
12 | 2           | 99

기본 INNER JOIN 쿼리

면접관이 보고 싶어 하는 표준 쿼리입니다. 세 부분에 주목하세요. 두 테이블, 행을 짝짓는 JOIN ... ON, 그리고 조회할 열입니다.

키워드 INNER는 모든 주요 데이터베이스에서 선택 사항입니다. JOIN만 작성하면 INNER JOIN을 의미하지만, 명시적으로 작성하면 의도를 드러내고 코드 검토에서 모호함을 피할 수 있습니다.

SELECT c.name, o.amount
FROM customers AS c
INNER JOIN orders AS o
  ON o.customer_id = c.id;

결과는 어떤 모습인가

샘플 데이터에 이 쿼리를 실행하면 세 행이 반환됩니다. Ada에게는 주문이 두 개 있으므로 두 번 나타납니다. Bob은 한 번 나타납니다.

Cleo는 사라집니다. 일치하는 주문이 없으므로 INNER JOIN이 Cleo를 결과에서 완전히 제외합니다. 일치하지 않는 행이 사라진다는 점을 소리 내어 설명하는 것이 JOIN 면접에서 가장 중요합니다.

name | amount
Ada  | 50
Ada  | 20
Bob  | 99

행 짝짓기 정신 모델

데이터베이스가 먼저 데카르트 곱을 만든다고 상상해 보세요. 즉, 모든 고객과 모든 주문을 짝짓는 것입니다. 고객 3명과 주문 3개라면 후보 쌍은 9개입니다.

그런 다음 ON 조건식을 적용하고 조건식이 TRUE인 쌍만 남깁니다. 9개의 후보 중 o.customer_id = c.id를 통과하는 것은 3개뿐입니다.

성능을 생각할 때는 이렇게 처리한다고 가정하지 않지만, "몇 개의 행이 반환되는가?"라는 모든 질문에 답할 수 있는 정확한 모델입니다.

후보 쌍 살펴보기

이제 추적해 보겠습니다. 각 쌍 뒤의 주석은 조건식이 참인지 여부를 보여 줍니다.

TRUE인 세 행만 결과에 남습니다. Cleo(식별자 3)가 포함된 모든 쌍은 조건을 만족하지 않으므로 Cleo는 아무것도 결과에 추가하지 않습니다.

-- customer.id vs order.customer_id
(Ada=1, ord10 cust=1)  -> TRUE  keep
(Ada=1, ord11 cust=1)  -> TRUE  keep
(Ada=1, ord12 cust=2)  -> FALSE
(Bob=2, ord10 cust=1)  -> FALSE
(Bob=2, ord12 cust=2)  -> TRUE  keep
(Cleo=3, anything)     -> FALSE (no order matches 3)

INNER JOIN은 순서와 무관합니다

자주 나오는 질문입니다. 어느 테이블을 먼저 작성하는지가 중요할까요? INNER JOIN에서는 그렇지 않습니다. ON 조건이 대칭적이므로 이 두 쿼리는 동일한 행을 반환합니다.

최적화기는 쿼리를 어떻게 작성했는지와 관계없이 어느 테이블을 먼저 읽을지 자유롭게 선택할 수 있습니다. (나중에 살펴볼 LEFT/RIGHT JOIN에서는 그렇지 않습니다.)

-- These return the same rows
SELECT c.name, o.amount
FROM customers c JOIN orders o ON o.customer_id = c.id;

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

테이블 별칭은 기본입니다

면접관은 짧고 명확한 별칭을 기대합니다. 장황하게 완전히 수식한 버전과 깔끔하게 별칭을 사용한 버전을 비교해 보십시오.

두 테이블에 같은 열 이름이 있을 때는 별칭이 필수가 됩니다. 여기서 별칭 없이 id를 선택하면 모호한 열 오류가 발생하므로 c.id 또는 o.id라고 작성해야 합니다.

-- verbose
SELECT customers.name, orders.amount
FROM customers JOIN orders
  ON orders.customer_id = customers.id;

-- aliased, preferred
SELECT c.name, o.amount
FROM customers c JOIN orders o
  ON o.customer_id = c.id;

둘 이상의 열로 조인하기

ON 조건식은 단일 등식으로 제한되지 않습니다. 관계가 복합 키로 정의되어 있다면 조건을 AND로 결합해야 합니다.

여기서는 제품별, 지역별로 가격이 적용되므로 두 열이 모두 일치해야 합니다. 면접관은 이를 통해 지원자가 단일 열 조인을 단순히 외우기만 한 것이 아닌지 확인합니다.

SELECT s.units, p.unit_price
FROM sales s
INNER JOIN price_list p
  ON p.product_id = s.product_id
 AND p.region     = s.region;

비등가 조인도 존재합니다

ON 조건은 =뿐 아니라 어떤 부울 표현식이든 될 수 있습니다. 비등가 조인은 범위나 부등식을 사용합니다. 대표적인 예로 점수를 등급 구간에 분류하는 경우가 있습니다.

각 점수는 자신을 포함하는 범위의 유일한 구간과 일치합니다. 조인이 등가 비교로만 제한되지 않는다고 언급하면 숙련자로 보일 수 있습니다.

SELECT s.student, g.grade
FROM scores s
INNER JOIN grades g
  ON s.points >= g.min_points
 AND s.points <= g.max_points;

명시적 JOIN과 쉼표 조인

기존 코드와 일부 면접 문제에서는 여전히 예전 쉼표 조인 문법을 접하게 됩니다. 다음 두 질의는 INNER JOIN에서 같은 결과를 냅니다.

명시적인 JOIN ... ON 형식을 선호하십시오. 쉼표 문법은 WHERE를 빠뜨려 우발적인 카테시안 곱을 만드는 실수를 유발하기 쉽고, 바로 이런 오류를 면접관이 찾아내려 합니다.

-- old implicit join
SELECT c.name, o.amount
FROM customers c, orders o
WHERE o.customer_id = c.id;

-- modern explicit join (preferred)
SELECT c.name, o.amount
FROM customers c
JOIN orders o ON o.customer_id = c.id;

빠른 확인

INNER JOIN 매칭이라는 핵심 개념을 확인합니다.

복습: INNER JOIN의 매칭 방식

면접에서 반복해서 말할 핵심 내용입니다.

  • INNER JOIN은 일치하는 쌍만 유지하며, 어느 한쪽에서든 일치하지 않는 행은 사라집니다.
  • 사고 모델: 가능한 모든 쌍을 만든 다음 ON 조건식이 참인 쌍만 남깁니다.
  • 순서와 무관하며 INNER 키워드는 선택 사항입니다.
  • ON에는 단일 =뿐 아니라 복합 키, 범위, 부등식도 사용할 수 있습니다.
  • 모호한 열 오류와 우발적인 카테시안 곱 오류를 피하려면 명확한 별칭과 함께 명시적인 JOIN ... ON을 사용하십시오.

자주 묻는 질문

“INNER JOIN이 행을 일치시키는 방식” 강의는 무료인가요?

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

“INNER JOIN이 행을 일치시키는 방식”에서 뭘 배우나요?

모든 JOIN 질문을 쉽게 이해하게 해 주는 행 쌍 모델을 익힙니다. 브라우저에서 직접 실행하는 실습 코드로 Coding Interview Prep을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

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

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

“INNER JOIN이 행을 일치시키는 방식” 강의는 얼마나 걸리나요?

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

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

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

이 강의의 모든 강의

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