홈 › SQL 중급 › 03 / 11

조인 심화: INNER·OUTER·SELF·CROSS, Oracle (+)

섹션 6진행 0 / 11

조인 심화: INNER·OUTER·SELF·CROSS, Oracle (+)

두 테이블을 엮는 조인은 INNER JOIN 하나로 끝나지 않습니다. 부서에 직원이 없어도 부서명은 나와야 하는 보고서, 같은 테이블에서 직원과 관리자를 동시에 뽑는 조회, 두 목록의 모든 조합을 만드는 작업은 각각 OUTER JOIN, SELF JOIN, CROSS JOIN 이 필요합니다. 이 레슨은 INNER·LEFT·RIGHT·FULL 의 차이, ON 과 WHERE 위치가 결과를 바꾸는 함정, 조인 뒤 행 수가 부풀어 집계가 틀리는 문제를 직접 실행해 확인하고, Oracle 의 구식 (+) 표기와 DB별 문법 차이도 다룹니다.

1. 왜 배우는가

실무 조회는 대부분 테이블 하나로 끝나지 않습니다. 부서와 직원, 직원과 주문처럼 서로 연결된 테이블을 묶어야 화면 한 장이 완성됩니다. INNER JOIN 만 쓰면 짝이 없는 쪽이 통째로 빠지는데, "직원이 0명인 부서도 목록에 나와야 한다"처럼 짝이 없어도 남겨야 하는 요구가 실무에는 흔합니다.

OUTER JOIN 은 이런 요구를 풀지만 함정도 있습니다. LEFT JOIN 으로 짝 없는 행을 살려 놓고 WHERE 절에서 오른쪽 테이블 컬럼으로 필터를 걸면, 그 순간 짝 없는 행이 다시 사라져 결국 INNER JOIN 과 같아집니다. 원인을 모르면 "분명히 LEFT JOIN 을 썼는데 왜 빠지지?"라는 질문을 반복하게 됩니다.

SELF JOIN 과 CROSS JOIN 은 조인 대상이 특이한 경우입니다. 조직도의 "직원-관리자"처럼 같은 테이블 안에서 관계를 찾을 때는 SELF JOIN, 두 목록의 모든 조합(부서 x 분기 보고서 틀 등)이 필요할 때는 CROSS JOIN 을 씁니다. 오래된 Oracle 코드에는 (+) 표기가 아직 많이 남아 있어, 읽을 줄은 알아야 합니다.