topic난이도 · 약 40

JOIN — 테이블 결합

여러 테이블의 행을 결합해 하나의 결과 집합으로. INNER vs OUTER, NULL 처리가 핵심.

#SQL#JOIN#실기핵심
왜 배우는가

'매칭되지 않은 쪽'을 어떻게 처리하느냐가 INNER와 OUTER를 가른다. 실기 SQL 작성에서 잘못된 조인은 한 문제를 통째로 날린다.

은 두 테이블의 행을 조건에 따라 결합한다. 결합 방식은 5가지: INNER, LEFT OUTER, RIGHT OUTER, FULL OUTER, CROSS.

사원 (EMPLOYEES)
idname부서ID
1홍길동10
2이순신20
3세종10
4유관순NULL
부서 (DEPARTMENTS)
idname
10개발
20영업
30기획
사원부서교집합만
SQL
SELECT ... FROM 사원 e INNER JOIN 부서 d ON e.부서ID = d.id
결과 (3행)
e.ide.named.idd.name
1홍길동10개발
2이순신20영업
3세종10개발

JOIN 타입을 바꿔보며 매칭되지 않은 쪽(유관순 / 기획부)이 어떻게 처리되는지 확인해 보자.

JOIN 타입을 바꿔보며 매칭되지 않은 쪽이 NULL로 처리되는지, 빠지는지 확인
sql
-- INNER JOIN (ANSI 표준)
SELECT e.이름, d.부서명
  FROM 사원 e
 INNER JOIN 부서 d
    ON e.부서ID = d.id;

-- 같은 의미, 구식 표기 (WHERE 조인)
SELECT e.이름, d.부서명
  FROM 사원 e, 부서 d
 WHERE e.부서ID = d.id;

-- LEFT OUTER: 부서 없는 사원도 포함
SELECT e.이름, d.부서명
  FROM 사원 e
  LEFT OUTER JOIN 부서 d ON e.부서ID = d.id;

-- FULL OUTER: 양쪽 모두 보존
SELECT e.이름, d.부서명
  FROM 사원 e
  FULL OUTER JOIN 부서 d ON e.부서ID = d.id;

SELF JOIN — 같은 테이블을 자기 자신과 조인. 별칭이 필수다. `FROM 사원 e1 INNER JOIN 사원 e2 ON e1.사수ID = e2.id`.

매칭 안 되는 행 찾기 패턴: `LEFT OUTER JOIN ... WHERE 오른쪽.id IS NULL`. 이 패턴은 '부서 없는 사원' 같은 질의에서 필수.

실기 드릴 3문항
database실기 드릴 · SQL 작성

`사원`과 `부서`를 조인해서 부서가 없는 사원의 이름도 함께 조회하는 SQL을 작성하시오.

edit실기 드릴 · 단답형

두 테이블의 모든 가능한 조합을 만드는 조인(카티션 곱)을 무엇이라 하는가?

database실기 드릴 · SQL 작성

`사원` 테이블에서 자신의 사수의 이름을 함께 조회하는 SELF JOIN SQL을 작성하시오. (사원.사수ID는 같은 테이블의 id를 참조)