JOIN 체크리스트

INNER JOIN 작성 기준

조인 자체보다 실수는 조건 누락, 모호한 컬럼, 예상보다 늘어난 결과 행에서 자주 발생합니다.

users u u.user_id u.username u.created_at
orders o o.user_id o.order_id o.status
result row SELECT: 필요한 별칭 컬럼만 WHERE: 결과 필터만 EXPLAIN: 읽은 행 수 확인
1

조인 조건을 빠뜨리지 않는다

조건이 없으면 모든 행 조합이 만들어져 결과가 폭발합니다.

JOIN orders o
  ON u.user_id = o.user_id
2

ON과 WHERE의 역할 분류

INNER JOIN에서는 결과가 같아 보일 수 있지만, OUTER JOIN으로 가면 의미가 달라집니다.

ON u.user_id = o.user_id
WHERE o.status = 'PAID'
3

같은 컬럼명은 별칭 구분

양쪽 테이블에 user_id, created_at 같은 이름이 있으면 어느 테이블 컬럼인지 밝혀야 합니다.

SELECT u.user_id, o.order_id
4

1:N 조인은 행이 늘어날 수 있다

회원 1명에 주문 3건이 있으면 JOIN 결과에는 그 회원이 3번 나타납니다.

users 1행 + orders 3행
→ 결과 3행
5

필요 컬럼만 선택한다

SELECT *는 중복 컬럼, 전송량, API 응답 형태 충돌을 만들기 쉽습니다.

SELECT u.username, o.status
6

실행 계획과 인덱스 확인

대량 테이블에서는 조인 컬럼 인덱스와 읽은 행 수를 함께 확인합니다.

EXPLAIN SELECT ... JOIN ...
정확성

ON 조건이 결과의 의미를 결정합니다.

가독성

별칭은 짧게 쓰되 일관되게 유지합니다.

성능

인덱스는 실제 쿼리 패턴과 실행 계획으로 판단합니다.