조인 심화: INNER·OUTER·SELF·CROSS, Oracle (+)
5. 자주 하는 실수 (Tip)
실수 1: LEFT JOIN 뒤 WHERE 로 오른쪽 컬럼을 거른다
가장 흔한 실수입니다. LEFT JOIN 으로 살려 놓은 NULL 행이 WHERE 절 조건에서 다시 걸러져, 결과적으로 INNER JOIN 을 쓴 것과 같아집니다. 오른쪽 테이블 조건으로 짝 없는 행까지 남기고 싶다면 조건을 ON 절 안으로 옮깁니다.
실수 2: ON 절을 빠뜨려 의도치 않은 CROSS JOIN 이 된다
FROM a, b 처럼 콤마로 테이블을 나열하고 WHERE 절에 조인 조건을 안 넣으면, 두 테이블의 모든 조합이 그대로 곱해집니다. 행이 갑자기 몇 배로 늘었다면 조인 조건을 빠뜨리지 않았는지부터 확인합니다.
실수 3: 조인 후 COUNT(*) 로 인원·건수를 센다
1:N 관계인 테이블을 하나 더 조인하면 원래 행이 여러 번 복제됩니다. 그 상태로 COUNT(*) 를 쓰면 실제보다 부풀려진 값이 나옵니다. 기준이 되는 컬럼을 COUNT(DISTINCT) 로 세는 습관을 들입니다.
실수 4: SELF JOIN 에서 INNER JOIN 을 써서 최상위 행이 사라진다
관리자가 없는 대표이사처럼 자기 참조 컬럼이 NULL 인 행은 INNER JOIN self join 에서 통째로 빠집니다. 최상위 행도 남겨야 하면 LEFT JOIN 으로 self join 합니다.