JOIN입문

INNER JOIN

두 테이블 모두에 매칭되는 행만 반환하는 가장 기본적인 조인

정의

두 테이블을 연결해서 양쪽에 모두 있는 행만 결과로 가져온다. 예를 들어 직원 테이블과 부서 테이블을 dept_id 기준으로 INNER JOIN하면, 부서가 정해진 직원만 결과에 나온다. 부서 없이 비어있는 직원이나 직원이 없는 빈 부서는 결과에서 빠진다. JOIN 키워드만 써도 기본값이 INNER다.

왜 중요한가?

JOIN 중 가장 흔하지만 "한쪽에만 있는 데이터는 결과에서 사라진다"는 점을 놓치면 데이터가 누락되는 버그가 생긴다. 직원이 한 명도 없는 신규 부서로 리포트를 만들면 그 부서는 통계에 잡히지 않는다.

틀리기 쉬운 포인트

  • !INNER JOIN은 양쪽 모두 매칭되어야 반환됩니다. 한쪽에만 있는 데이터는 사라집니다.
  • !JOIN과 INNER JOIN은 동일합니다. INNER는 기본값이라 생략 가능하지만, 의도를 명확히 하기 위해 명시하는 것을 권장합니다.
  • !ON 절의 조건과 WHERE 절의 조건을 혼동하면 안 됩니다. INNER JOIN에서는 결과가 같지만 OUTER JOIN에서는 완전히 다릅니다.

예시

SELECT e.name, d.dept_name
FROM employees e
INNER JOIN departments d
ON e.department_id = d.id;

성능 포인트

!조인 키에 인덱스가 있으면 NL Join이, 양쪽이 큰 테이블이면 Hash Join이 유리. ON 절 양쪽에 함수를 씌우면 인덱스 활용이 막혀 Full Scan + Hash Join으로 풀린다.

관련 개념

관련 카테고리