0Pricing
Coding Interview Prep · 강의

RIGHT 및 FULL OUTER JOIN의 의미

각 JOIN이 필요한 경우와 RIGHT를 LEFT로 다시 작성하는 방법을 알아봅니다.

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

LEFT JOIN을 넘어서

LEFT JOIN을 이해하고 나면 면접관은 그 반대 형태와 양쪽을 합친 형태를 확인합니다. 바로 RIGHT JOIN과 FULL OUTER JOIN입니다.

  • RIGHT JOIN은 오른쪽 테이블의 모든 행을 보존합니다.
  • FULL OUTER JOIN은 두 테이블에서 일치하지 않는 행을 모두 보존합니다.

이 단원에서는 각각을 정확히 정의하고, 면접관이 자주 기대하는 재작성 요령인 RIGHT JOIN을 LEFT JOIN으로 바꾸는 방법을 보여 드립니다.

RIGHT JOIN 정의

RIGHT JOIN(또는 RIGHT OUTER JOIN)은 JOIN 키워드 뒤에 작성된 오른쪽 테이블의 모든 행을 유지합니다. 일치하지 않는 오른쪽 행은 왼쪽 테이블의 열이 NULL인 상태로 나타납니다.

이는 LEFT JOIN과 정확히 반대입니다. LEFT가 먼저 이름이 나온 테이블을 보존한다면 RIGHT는 두 번째로 이름이 나온 테이블을 보존합니다.

SELECT c.name, o.amount
FROM orders o
RIGHT JOIN customers c
  ON o.customer_id = c.id;
-- keeps ALL customers, even those
-- with no order (Carol -> amount NULL)

다시 살펴보는 테이블

이전과 같은 데이터입니다. 고객 3(Carol)에게는 주문이 없습니다. 이 데이터에서는 모든 주문 행이 기존 고객을 참조하므로, 고객 테이블이 보존되는 쪽일 때 고아 주문은 없습니다.

-- customers           orders
-- 1 | Alice           10 | 1 | 50
-- 2 | Bob             11 | 1 | 75
-- 3 | Carol           12 | 2 | 20

RIGHT를 LEFT로 다시 작성하기

면접에서 강조할 핵심은 다음과 같습니다. RIGHT JOIN은 실제로 거의 사용되지 않습니다. 항상 테이블 순서를 바꾸고 LEFT JOIN을 사용할 수 있기 때문입니다. 아래의 두 질의는 논리적으로 동일합니다.

많은 스타일 가이드에서는 RIGHT JOIN을 아예 금지합니다. 왼쪽에서 오른쪽으로 읽고 항상 왼쪽 테이블을 보존하는 편이 추론하기 쉽기 때문입니다.

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

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

FULL OUTER JOIN 정의

FULL OUTER JOIN은 두 테이블에서 일치하지 않는 행을 모두 보존합니다. LEFT JOIN과 RIGHT JOIN을 합친 것이라고 생각하면 됩니다.

  • 일치하는 쌍은 일반적인 형태로 나타납니다.
  • 일치하는 행이 없는 왼쪽 행: 오른쪽 열은 NULL입니다.
  • 일치하는 행이 없는 오른쪽 행: 왼쪽 열은 NULL입니다.

이는 "양쪽의 모든 내용을 표시하고, 일치하는 행은 서로 맞춰 보여 달라"는 요구에 답합니다.

SELECT c.name, o.id AS order_id
FROM customers c
FULL OUTER JOIN orders o
  ON o.customer_id = c.id;

FULL OUTER가 빛을 발하는 경우

FULL OUTER JOIN은 서로 일치해야 하지만 실제로는 다를 수 있는 두 데이터 집합을 비교하는 대사에 가장 적합합니다.

orders 테이블과 별도의 payments 테이블이 있다고 생각해 보십시오. 주문 식별자를 기준으로 FULL OUTER JOIN을 하면 결제가 없는 주문과 일치하는 주문이 없는 결제를 하나의 결과에서 모두 드러낼 수 있습니다. 누락된 쪽은 각각 NULL로 표시됩니다.

SELECT o.id AS order_id, p.id AS payment_id
FROM orders o
FULL OUTER JOIN payments p
  ON p.order_id = o.id
WHERE o.id IS NULL OR p.id IS NULL;
-- rows where one side is missing

방언 인식

면접관은 이식성을 확인하려고 질문할 수 있습니다. MySQL에는 FULL OUTER JOIN 키워드가 없습니다(버전 8까지). 포스트그레스, SQL 서버, 오라클은 이를 지원합니다.

MySQL에서는 LEFT JOIN과 RIGHT JOIN을 UNION으로 결합해 이를 흉내 낼 수 있습니다(UNION이 중복된 일치 행을 제거합니다). 이러한 차이를 알고 있다는 것은 실무 경험이 있음을 보여 줍니다.

-- FULL OUTER JOIN emulated in MySQL
SELECT c.name, o.id FROM customers c
LEFT JOIN orders o ON o.customer_id = c.id
UNION
SELECT c.name, o.id FROM customers c
RIGHT JOIN orders o ON o.customer_id = c.id;

네 가지 조인 유형 한눈에 보기

이 표를 머릿속에 기억해 두십시오. “보존됨”은 일치하지 않는 행이 NULL 값과 함께 남는다는 뜻입니다.

  • INNER JOIN: 일치하는 행만 반환합니다. 아무것도 보존하지 않습니다.
  • LEFT JOIN: 왼쪽 테이블의 모든 행을 보존합니다.
  • RIGHT JOIN: 오른쪽 테이블의 모든 행을 보존합니다.
  • FULL OUTER JOIN: 양쪽을 모두 보존합니다.

모든 외부 조인 면접 질문은 어느 쪽을 보존할지 선택하는 문제로 귀결됩니다.

이 중에서 선택하기

“일치하지 않는 행 중 어떤 것을 유지해야 하는가?”라고 물어보고 조인을 선택하십시오.

  • 주도 테이블 또는 기본 테이블의 행만 유지하려면: LEFT JOIN(기본 테이블을 먼저 배치합니다).
  • 대조를 위해 양쪽의 일치하지 않는 행이 모두 필요하면: FULL OUTER JOIN.
  • 일치하는 행만 중요하면: INNER JOIN.

RIGHT JOIN을 직접 선택하는 경우는 거의 없습니다. RIGHT JOIN을 LEFT JOIN으로 바꾸어 표현하면 됩니다.

대조 예시

FULL OUTER JOIN을 사용해 각 행의 상태에 라벨을 붙여 보십시오. NULL 패턴에 CASE를 적용하면 어느 쪽이 누락되었는지 알 수 있습니다. 이는 전형적인 감사 쿼리입니다.

SELECT
  COALESCE(o.id, p.order_id) AS ord,
  CASE
    WHEN p.id IS NULL THEN 'no payment'
    WHEN o.id IS NULL THEN 'orphan payment'
    ELSE 'matched'
  END AS status
FROM orders o
FULL OUTER JOIN payments p ON p.order_id = o.id;

흔한 오해

지원자는 종종 FULL OUTER JOIN이 일치하지 않는 행들의 카테시안 곱을 반환한다고 생각합니다. 그렇지 않습니다. 각 쪽의 일치하지 않는 행은 NULL 값과 짝을 이루어 정확히 한 번씩 나타나며, 서로 간에 곱해지지 않습니다.

일치하는 행은 여전히 일반적인 조인 곱셈을 따릅니다(일치하는 각 쌍마다 출력 행 하나). 이는 모든 조인에 적용되는 동일한 확장 규칙입니다.

빠른 확인

면접관이 RIGHT JOIN을 금지하는 팀을 위해 쿼리를 다시 작성하라고 요청합니다.

요약

RIGHT JOIN은 오른쪽 테이블을 보존하고, FULL OUTER JOIN은 양쪽을 모두 보존합니다. 모든 RIGHT JOIN은 테이블 순서를 바꾸어 LEFT JOIN으로 다시 작성할 수 있으므로 팀에서는 LEFT JOIN을 선호합니다.

  • FULL OUTER는 두 데이터 집합을 대조할 때 적합합니다.
  • MySQL에는 FULL OUTER가 없으므로 LEFT + RIGHT + UNION으로 흉내 냅니다.
  • 어떤 일치하지 않는 행을 유지할지 결정한 뒤 조인을 선택하십시오.
  • 일치하지 않는 행은 NULL 값과 함께 한 번만 나타나며, 카테시안 곱으로 늘어나지 않습니다.

자주 묻는 질문

“RIGHT 및 FULL OUTER JOIN의 의미” 강의는 무료인가요?

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

“RIGHT 및 FULL OUTER JOIN의 의미”에서 뭘 배우나요?

각 JOIN이 필요한 경우와 RIGHT를 LEFT로 다시 작성하는 방법을 알아봅니다. 브라우저에서 직접 실행하는 실습 코드로 Coding Interview Prep을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

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

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

“RIGHT 및 FULL OUTER JOIN의 의미” 강의는 얼마나 걸리나요?

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

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

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

이 강의의 모든 강의

  1. LEFT JOIN과 일치하지 않는 행 보존하기
  2. RIGHT 및 FULL OUTER JOIN의 의미
  3. 일치하는 값이 없는 행 찾기(안티 조인)
  4. 외부 JOIN에서 WHERE를 사용하는 함정
← Coding Interview Prep(으)로 돌아가기