관계형 데이터베이스에서 JOIN(조인)은 두 개 이상의 테이블을 결합하여 원하는 데이터를 조회하는 기법입니다. 조인을 사용하면 여러 테이블에서 필요한 데이터를 가져와 하나의 결과 집합으로 반환할 수 있습니다.
예를 들어, 회원(Member) 테이블과 주문(Order) 테이블이 있을 때, 특정 회원이 한 주문 목록을 조회하려면 두 테이블을 조인해야 합니다.
조인은 여러 방식으로 데이터를 결합할 수 있으며, 대표적으로 INNER JOIN, OUTER JOIN, CROSS JOIN 등이 있습니다. 각각의 방식을 아래의 공통 예제를 통해 정리해보도록 하겠습니다.
< 회원(Member) 테이블 >
| id | name |
|---|---|
| 1 | kim |
| 2 | lee |
| 3 | choi |
< 주문(Order) 테이블 >
| id | member_id | order_date |
|---|---|---|
| 1 | 1 | 2025-01-29 |
| 2 | 1 | 2025-01-29 |
| 3 | 3 | 2025-01-29 |
< sql문 >
SELECT M.id, M.name, O.order_id, O.order_date FROM Member M INNER JOIN Orders O ON M.id = O.member_id;*참고: INNER JOIN에서 INNER 생략 가능
< INNER JOIN 결과 >
| id | name | order_id | order_date |
|---|---|---|---|
| 1 | kim | 1 | 2025-01-29 |
| 1 | kim | 2 | 2025-01-29 |
| 3 | choi | 3 | 2025-01-29 |
< sql문 >
SELECT M.id, M.name, O.order_id, O.order_date FROM Member M LEFT JOIN Orders O ON M.id = O.member_id;
< LEFT JOIN 결과 >
| id | name | order_id | order_date |
|---|---|---|---|
| 1 | kim | 1 | 2025-01-29 |
| 1 | kim | 2 | 2025-01-29 |
| 2 | lee | NULL | NULL |
| 3 | choi | 3 | 2025-01-29 |
< sql문 >
SELECT M.id, M.name, O.order_id, O.order_date FROM Member M RIGHT JOIN Orders O ON M.id = O.member_id;
< RIGHT JOIN 결과 >
| id | name | order_id | order_date |
|---|---|---|---|
| 1 | kim | 1 | 2025-01-29 |
| 1 | kim | 2 | 2025-01-29 |
| 3 | choi | 3 | 2025-01-29 |
< sql문 >
SELECT M.id, M.name, O.order_id, O.order_date FROM Member M FULL OUTER JOIN Orders O ON M.id = O.member_id;
< FULL OUTER JOIN 결과 >
| id | name | order_id | order_date |
|---|---|---|---|
| 1 | kim | 1 | 2025-01-29 |
| 1 | kim | 2 | 2025-01-29 |
| 2 | lee | NULL | NULL |
| 3 | choi | 3 | 2025-01-29 |
< sql문 >
SELECT M.id, M.name, O.order_id, O.order_date FROM Member M CROSS JOIN Orders O;
< CROSS JOIN 결과 >
| id | name | order_id | order_date |
|---|---|---|---|
| 1 | kim | 1 | 2025-01-29 |
| 1 | kim | 2 | 2025-01-29 |
| 1 | kim | 3 | 2025-01-29 |
| 2 | lee | 1 | 2025-01-29 |
| 2 | lee | 2 | 2025-01-29 |
| 2 | lee | 3 | 2025-01-29 |
| 3 | choi | 1 | 2025-01-29 |
| 3 | choi | 2 | 2025-01-29 |
| 3 | choi | 3 | 2025-01-29 |
< sql문 >
SELECT M.*, O.* FROM Member M, Orders O;