DB

JOIN

JOIN은 두 테이블에서 조건이 맞는 행끼리 이어 붙여 한 줄로 만듭니다. 짝이 없는 행을 버리느냐 NULL로 채워 남기느냐에 따라 INNER, LEFT, RIGHT, FULL OUTER로 나뉩니다.

두 테이블의 행이 JOIN 조건으로 연결되어 결과 테이블이 만들어지는 과정을 보여 주는 시뮬레이터

1. JOIN 종류를 고르세요

2. 행을 하나씩 맞춰 보세요

학생 s
수강 e
결과

[다음 단계]를 누르면 학생 테이블의 행을 하나씩 꺼내 수강 테이블에서 학번이 같은 행을 찾습니다. 오른쪽 벤 다이어그램의 색칠된 부분이 결과에 남는 범위입니다.

INNER짝 있는 행만
LEFT왼쪽 전부 + 짝
RIGHT오른쪽 전부 + 짝
FULL OUTER양쪽 전부
짝 없는 칸NULL

OUTER JOIN은 짝이 없는 행을 NULL로 채워 남깁니다

LEFT JOIN은 왼쪽 테이블의 모든 행을 결과에 남깁니다. 오른쪽에 짝이 없으면 오른쪽 열을 NULL로 채웁니다. 학생이 한 과목도 듣지 않아도 결과에 나오므로, "수강 신청을 하지 않은 학생 찾기"는 LEFT JOIN 뒤에 WHERE e.학번 IS NULL을 붙여 풉니다.

짝이 여러 개면 왼쪽 행이 그 수만큼 복제됩니다. 김하늘이 두 과목을 들으면 결과에 김하늘이 두 줄 나옵니다. JOIN 뒤에 COUNT를 할 때 행 수가 예상보다 많다면 이 복제를 의심하세요.

면접에서 자주 묻는 것

LEFT JOIN에서 오른쪽 테이블 조건을 WHERE에 쓰면 NULL인 행이 걸러져 사실상 INNER JOIN이 됩니다. 오른쪽 테이블을 거르면서 왼쪽 행은 모두 남기려면 그 조건을 ON에 써야 합니다. 조건 없이 모든 조합을 만드는 CROSS JOIN은 행 수가 m × n이 됩니다.