문법 · SQL · intermediate

JOIN: INNER · LEFT와 없는 행 찾기

두 표를 키로 붙이고, LEFT JOIN + IS NULL 패턴을 익힙니다.

배우기 · SQL 문법 · 18분 · 2/14 · sql · join

이 트랙 목차 (14)
  1. 1. SELECT · WHERE · ORDER · LIMIT
  2. 2. JOIN: INNER · LEFT와 없는 행 찾기
  3. 3. GROUP BY · 집계 · HAVING
  4. 4. 서브쿼리·IN·존재 여부
  5. 5. CASE · NULL · COALESCE
  6. 6. 윈도우 함수 맛보기: RANK · OVER
  7. 7. ORDER BY · LIMIT · DISTINCT
  8. 8. INSERT · UPDATE · DELETE 맛보기
  9. 9. 스칼라 함수 (UPPER · ROUND…)
  10. 10. 함수 응용 (INSTR · CAST · GROUP)
  11. 20. CASE · HAVING · LIKE
  12. 21. JOIN · NULLIF · DISTINCT
  13. 22. ROUND · LEFT JOIN · GROUP_CONCAT
  14. 23. UNION · INTERSECT · WITH

INNER JOIN

양쪽 모두 매칭되는 행만 남습니다.

SELECT u.name, o.total
FROM users u
INNER JOIN orders o ON u.id = o.user_id;

별칭(u, o)을 쓰면 열이 겹칠 때 읽기 쉽습니다.

LEFT JOIN

왼쪽 표는 모두 유지하고, 오른쪽이 없으면 NULL입니다.

SELECT u.id, u.name
FROM users u
LEFT JOIN orders o ON u.id = o.user_id
WHERE o.id IS NULL;

위는 주문이 한 번도 없는 사용자를 찾는 고전 패턴입니다.

JOIN 조건 위치

ON에 조인 키, WHERE에 필터를 두는 편이 명확합니다.
LEFT JOIN 뒤에 오른쪽 열을 WHERE right.col = 1처럼 걸면 INNER처럼 동작할 수 있습니다.

자기 조인

같은 표를 두 번 붙입니다 (관리자·부모 등).

SELECT e.name, m.name AS manager
FROM employees e
LEFT JOIN employees m ON e.manager_id = m.id;

함정

조인 결과 행 수

1:N이면 왼쪽 한 행이 여러 번 복제됩니다.
집계 전에 조인하면 수가 부풀 수 있습니다.
필요하면 서브쿼리로 먼저 집계하세요.

CROSS JOIN

조건 없는 곱집합. 의도할 때만.

연습 시나리오

“주문 없는 고객” → LEFT JOIN + WHERE order_id IS NULL
“주문 있는 고객만” → INNER JOIN

연습

JOIN 태그 문제에서 INNER로 맞춘 뒤, 한쪽만 있는 행이 필요하면 LEFT로 바꿔 보세요.

관련 짧은 원리

관련 문제