조인은 서로 관련된 데이터를 2개 이상의 테이블에서 가져와서 한꺼번에 조회할 수 있게 해준다.
INNER JOIN은 두 개 이상의 테이블을 조인할 때, 일치하는 값을 가진 행만 결과에 포함시킨다.
반면에 OUTER JOIN은 두 개 이상의 테이블을 조인할 때, 일치하는 값이 없는 경우에도 한쪽 또는 양쪽 테이블의 모든 행을 결과에 포함시킨다.
JOIN(INNER JOIN)
가장 흔히 볼 수 있는 조인 형태이다.
두 개 이상의 테이블에서 특정 키 값을 기준으로 동일한 데이터를 가진 행을 조회한다.
문법은 다음과 같다.
SELECT
<열 목록>
FROM
테이블1
INNER JOIN
테이블2
ON
테이블1.조인컬럼 = 테이블2.조인컬럼;

사원 정보를 가진 employees 테이블과 부서 정보를 가진 departments 테이블에서
같은 부서 id를 가진 사원의 이름과 부서의 이름을 출력해보자.
select
employees.dept_id, employees.emp_name, departments.dept_name
from
employees
inner join
departments
on
employees.dept_id = departments.dept_id;

조인한 결과는 다음과 같다. 부서 id가 존재하는 사원 테이블의 행에 한해서 결합된 레코드가 출력되었다!
마치 A∩B의 교집합을 연상케한다.

LEFT JOIN(LEFT OUTER JOIN)
LEFT JOIN은 왼쪽 테이블과 오른쪽 테이블이 있다고 가정하였을 때,
왼쪽 테이블의 모든 행을 출력하고 조인 조건이 일치하지 않는 오른쪽 테이블의 조인 컬럼의 값은 NULL을 반환한다.
문법은 다음과 같다.
SELECT
<열 목록>
FROM
테이블1
LEFT JOIN
테이블2
ON
테이블1.조인컬럼 = 테이블2.조인컬럼;
사원 정보를 가진 employees 테이블과 부서 정보를 가진 departments 테이블에서
사원의 이름과 부서의 이름을 출력해보자. 단, 부서 정보가 없는 값은 비워두도록 한다.
select
employees.dept_id, employees.emp_name, departments.dept_name
from
employees
left join
departments
on
employees.dept_id = departments.dept_id;

LEFT JOIN 결과는 다음과 같다.
left join을 기준으로 왼쪽 테이블인 employees의 레코드가 모두 출력되고, 조인 조건에 맞다면 즉 부서가 존재하면 부서 이름까지 출력한다.
하지만 부서가 존재하지 않으면 NULL로 컬럼 값이 채워진다.
다이어그램으로 표현한 LEFT JOIN이다.

RIGHT JOIN(RIGHT OUTER JOIN)
RIGHT JOIN은 왼쪽 테이블과 오른쪽 테이블이 있다고 가정하였을 때,
오른쪽 테이블의 모든 행을 출력하고 조인 조건이 일치하지 않는 왼쪽 테이블의 조인 컬럼의 값은 NULL을 반환한다.
문법은 다음과 같다.
SELECT
<열 목록>
FROM
테이블1
RIGHT JOIN
테이블2
ON
테이블1.조인컬럼 = 테이블2.조인컬럼;
사원 정보를 가진 employees 테이블과 부서 정보를 가진 departments 테이블에서
사원의 이름과 부서의 이름을 출력해보자. 단, 사원 정보가 없는 값은 비워두도록 한다.
select
employees.dept_id, employees.emp_name, departments.dept_name
from
employees
right join
departments
on
employees.dept_id = departments.dept_id;

RIGHT JOIN 결과는 다음과 같다.
right join을 기준으로 오른쪽 테이블인 departments의 레코드가 모두 출력되고, 조인 조건에 맞다면 즉 사원이 존재하면 사원 이름까지 출력한다.
하지만 부서 정보에 맞는 사원 정보가 존재하지 않으면 NULL로 컬럼 값이 채워진다.
다이어그램으로 표현한 RIGHT JOIN이다.

FULL OUTER JOIN(LEFT + RIGHT JOIN)
FULL OUTER JOIN은 LEFT JOIN과 RIGHT JOIN을 합친 결과와 같다.
하지만 MySQL은 FULL OUTER JOIN을 지원하는 문법이 따로 없다.
그대신 union이라는 문법을 사용하여 LEFT JOIN과 RIGHT JOIN 결과를 직접 결합한다.
SELECT
<열 목록>
FROM
테이블1
LEFT JOIN
테이블2
ON
테이블1.조인컬럼 = 테이블2.조인컬럼
UNION
SELECT
<열 목록>
FROM
테이블1
RIGHT JOIN
테이블2
ON
테이블1.조인컬럼 = 테이블2.조인컬럼;
사원 정보를 가진 employees 테이블과 부서 정보를 가진 departments 테이블에서
사원의 이름과 부서의 이름을 출력해보자. 단, 사원 또는 부서 정보가 없는 값은 비워두도록 한다.
select
employees.dept_id, employees.emp_name, departments.dept_name
from
employees
left join
departments
on
employees.dept_id = departments.dept_id
union
select
employees.dept_id, employees.emp_name, departments.dept_name
from
employees
right join
departments
on
employees.dept_id = departments.dept_id;

두 조인을 결합한 결과는 다음과 같다. 앞선 LEFT JOIN의 레코드와 RIGHT JOIN의 레코드를 모두 가져온 결과와 동일하다.
다이어그램으로 표현한 FULL OUTER JOIN을 살펴보자.

이처럼 조인은 원하는 컬럼의 값을 한데 모아보기 위해 만들어진 기능이다.
SQL을 공부할 때는 JOIN의 개념이 중요하기 때문에 익혀두고 가면 좋다 😊
:)
출처
https://hump-mountain.tistory.com/20
'Computer Science > 데이터베이스' 카테고리의 다른 글
| [DB] 트랜잭션 고립 수준(Transaction Isolation Level) (0) | 2025.09.19 |
|---|---|
| [DB] 공통 테이블 식(CTE) (0) | 2025.09.19 |
| [DB] Union vs Union All (0) | 2025.09.10 |
| [DB] 트랜잭션(Transaction) (2) | 2025.08.22 |
| [DB] RDBMS vs NoSQL (0) | 2025.06.10 |
