Skip to content

SQL 조인 해설

SQL JOIN 유형 비교: inner, outer, cross, self, lateral, natural — 각 유형이 반환하는 결과와 한 줄 예제.

조인은 공유 키를 기준으로 두 테이블의 행을 결합합니다. 키가 일치하거나, 누락되거나, 반복될 때 어떤 행이 남을지는 조인 유형이 결정합니다.

참조 표 · 8 항목
8 of 8 rows
내부 및 외부 조인
ON 조건이 두 테이블 모두에서 일치하는 행만 반환합니다. 어느 쪽이든 일치하지 않는 행은 버려집니다.SELECT u.name, o.total FROM users u INNER JOIN orders o ON u.id = o.user_id;
왼쪽 테이블의 모든 행. 일치가 없으면 오른쪽 열은 NULL이 됩니다.SELECT u.name, o.total FROM users u LEFT OUTER JOIN orders o ON u.id = o.user_id;
오른쪽 테이블의 모든 행. 일치가 없으면 왼쪽 열은 NULL이 됩니다.SELECT u.name, o.total FROM users u RIGHT OUTER JOIN orders o ON u.id = o.user_id;
두 테이블의 모든 행. 일치하지 않는 쪽은 NULL로 채워집니다.SELECT u.name, o.total FROM users u FULL OUTER JOIN orders o ON u.id = o.user_id;
교차 및 셀프 조인
데카르트 곱. 왼쪽의 각 행이 오른쪽의 모든 행과 짝을 이룹니다. ON 절이 없습니다.SELECT u.name, o.total FROM users u CROSS JOIN orders o;
별칭을 사용해 테이블을 자기 자신과 결합합니다. 한 테이블 안의 행끼리 비교합니다.SELECT a.id AS o1, b.id AS o2 FROM orders a JOIN orders b ON a.user_id = b.user_id WHERE a.id < b.id;
고급 조인
FROM 안의 서브쿼리를 외부 행마다 평가합니다. 서브쿼리는 외부 테이블의 열을 참조할 수 있습니다.SELECT u.name, o.total FROM users u, LATERAL (SELECT total FROM orders WHERE user_id = u.id LIMIT 1) o;
이름이 같은 열끼리 결합합니다. ON 절이 없습니다. 의도하지 않은 키 충돌에 주의하세요.SELECT u.name, o.total FROM users u NATURAL JOIN orders o;