menu
language한국어
save_alt 다운로드

SQL JOIN 치트 시트

모든 SQL JOIN 유형을 시각적 다이어그램과 코드 예제로 빠르게 확인하세요

INNER JOIN 가장 많이 사용

두 테이블 모두에서 값이 일치하는 행만 반환해요. 기본 JOIN 유형이며 가장 많이 사용돼요.
SELECT orders.id, customers.name, orders.amount
FROM orders
INNER JOIN customers
  ON orders.customer_id = customers.id

핵심 포인트:

  • 두 테이블에서 일치하는 레코드만 반환해요
  • 일치하지 않는 행은 자동으로 제외돼요
  • 성능 면에서 가장 효율적인 JOIN이에요
  • JOIN만 써도 돼요 (INNER가 생략된 것으로 간주)

LEFT JOIN

왼쪽 테이블의 모든 행과 오른쪽 테이블에서 일치하는 행을 반환해요. 일치하는 행이 없으면 오른쪽 테이블 컬럼에는 NULL 값이 반환돼요.
SELECT customers.name, orders.amount
FROM customers
LEFT JOIN orders
  ON customers.id = orders.customer_id

핵심 포인트:

  • 왼쪽(첫 번째) 테이블의 모든 레코드를 유지해요
  • 일치하지 않는 오른쪽 테이블 컬럼에는 NULL 값이 표시돼요
  • LEFT OUTER JOIN이라고도 해요
  • 관련 데이터가 없는 레코드를 찾을 때 유용해요

RIGHT JOIN

오른쪽 테이블의 모든 행과 왼쪽 테이블에서 일치하는 행을 반환해요. LEFT JOIN의 반대예요.
SELECT orders.amount, customers.name
FROM orders
RIGHT JOIN customers
  ON orders.customer_id = customers.id

핵심 포인트:

  • 오른쪽(두 번째) 테이블의 모든 레코드를 유지해요
  • 일치하지 않는 왼쪽 테이블 컬럼에는 NULL 값이 표시돼요
  • RIGHT OUTER JOIN이라고도 해요
  • 언제나 LEFT JOIN으로 바꿔 쓸 수 있어요

FULL OUTER JOIN

두 테이블의 모든 행을 반환하며, 어느 쪽에서든 일치하는 행이 없으면 NULL 값이 들어가요.
SELECT customers.name, orders.amount
FROM customers
FULL OUTER JOIN orders
  ON customers.id = orders.customer_id

핵심 포인트:

  • LEFT JOIN과 RIGHT JOIN의 결과를 합쳐요
  • 두 테이블의 모든 레코드를 보여줘요
  • MySQL에서는 지원되지 않아요 (대신 UNION 사용)
  • 모든 관계와 누락된 부분을 찾을 때 유용해요

CROSS JOIN 주의해서 사용

두 테이블의 데카르트 곱을 반환해요. 첫 번째 테이블의 모든 행이 두 번째 테이블의 모든 행과 결합돼요.
SELECT sizes.name, colors.name
FROM sizes
CROSS JOIN colors

-- Alternative syntax
SELECT sizes.name, colors.name
FROM sizes, colors

핵심 포인트:

  • ON 절이 필요 없어요 (조인 조건 없음)
  • 결과 행 수 = (왼쪽 테이블 행 수 × 오른쪽 테이블 행 수)
  • 순식간에 거대한 결과 집합이 만들어질 수 있어요
  • 조합이나 테스트 데이터를 생성할 때 유용해요

LEFT ANTI JOIN

왼쪽 테이블에서 오른쪽 테이블과 일치하는 행이 없는 행을 반환해요. 관계가 없는 레코드를 찾을 때 유용해요.
SELECT customers.name
FROM customers
LEFT JOIN orders
  ON customers.id = orders.customer_id
WHERE orders.id IS NULL

-- Alternative: NOT EXISTS
SELECT customers.name
FROM customers
WHERE NOT EXISTS (
  SELECT 1 FROM orders
  WHERE orders.customer_id = customers.id
)

핵심 포인트:

  • LEFT JOIN + WHERE IS NULL로 구현해요
  • 관련 데이터가 없는 레코드를 찾아요
  • "LEFT EXCLUDING JOIN"이라고도 해요
  • 예: 한 번도 주문하지 않은 고객

RIGHT ANTI JOIN

오른쪽 테이블에서 왼쪽 테이블과 일치하는 행이 없는 행을 반환해요. LEFT ANTI JOIN의 반대예요.
SELECT orders.id
FROM customers
RIGHT JOIN orders
  ON customers.id = orders.customer_id
WHERE customers.id IS NULL

-- Usually rewritten as LEFT ANTI JOIN
SELECT orders.id
FROM orders
LEFT JOIN customers
  ON orders.customer_id = customers.id
WHERE customers.id IS NULL

핵심 포인트:

  • RIGHT JOIN + WHERE IS NULL로 구현해요
  • 오른쪽 테이블에서 연결이 끊긴 레코드를 찾아요
  • 언제나 LEFT ANTI JOIN으로 바꿔 쓸 수 있어요
  • 예: 유효한 고객이 없는 주문

SQL을 더 편하게 작성하고 싶으세요?

Beekeeper Studio는 자동 완성, 쿼리 기록, 15개 이상의 데이터베이스 지원을 갖춘 현대적이고 직관적인 SQL 에디터예요.

Beekeeper Studio 무료로 사용해 보기