조인이란?

조인은 데이터베이스에서 두 개 이상의 테이블을 연결하여 데이터를 결합하는 것이다.

일반적으로는 두 테이블 간에 공통된 컬럼을 기준으로 조인을 수행한다. 

 

예를 들어 주문 테이블과 고객 테이블이 있을 때, 주문 테이블의 고객 ID와 고객 테이블의 고객 ID를 기준으로

두 테이블을 조인한다.

INNER JOIN

INNER JOIN은 두 테이블 간의 일치하는 행만 결과로 반환한다. 두 테이블에서 결합 조건을 충족하는 행만 포함되며,

교집합이다. 일반적으로 사용하는 조인이라고 생각하면 된다.

 

employees 테이블과 departments 테이블의 department_id와 id가 일치하는 직원과 부서의 이름을 반환

두 테이블 모두에 일치하는 행만 포함된다.

SELECT employees.name, departments.department_name
FROM employees
INNER JOIN departments ON employees.department_id = departments.id;

 

OUTER JOIN

한 테이블의 모든 행을 포함하며, 다른 테이블에서 일치하지 않는 행은 NULL로 표시된다.

OUTER JOIN에는 RIGHT, LEFT, FULL JOIN이 있다.

 

  • LEFT JOIN: 왼쪽 테이블의 모든 행과 오른쪽 테이블에서 조건이 일치하는 행을 반환한다.
  • 일치하지 않는 오른쪽 테이블의 열은 NULL이다.
  • RIGHT JOIN: 오른쪽 테이블의 모든 행과 왼쪽 테이블에서 조건이 일치하는 행을 반환한다.
  • 일치하지 않는 왼쪽 테이블의 열은 NULL이다.
  • FULL JOIN: 두 테이블의 모든 행을 반환하며, 일치하지 않는 경우 NULL로 채워진다.

 

LEFT Join

Left join은 왼쪽 테이블의 모든 행을 포함하여 오른쪽 테이블에 왼쪽 테이블과 일치하는 행이 있으면 포함시킨다.

만약 없을시 Null값을 사용하여 컬럼을 채운다.

 

 

Left join에서는 왼쪽 테이블의 모든 행을 결과에 포함한다.

왼쪽 테이블의 모든 열과 데이터가 결과에 포함되며

오른쪽 테이블은 왼쪽 테이블과 일치하는 데이터가 있을 경우 결과에 추가된다.

 

왼쪽 테이블 (Left Table)

왼쪽 테이블은 SQL 쿼리에서 먼저 지정된 테이블이다.

 

오른쪽 테이블 (Right Table)

오른쪽 테이블은 SQL 쿼리에서 두 번째로 지정된 테이블이다.

 

그냥 join 해도 되지 않나? 왜 굳이 left join을 해야하는거지?

1. 왼쪽 테이블의 모든 데이터 유지

Left join은 왼쪽 테이블의 모든 행을 결과에 포함한다. 

왼쪽 테이블의 데이터를 유지하며 오른쪽 테이블과의 연결을 할 수 있음을 의미한다.

 

왼쪽 테이블의 데이터가 중요하고 모든 데이터를 보존하고자 할 때 left join을 사용한다.

예를 들어, 모든 고객 정보를 유지하면서 주문 기록을 조회하는 경우에 사용한다.

 

2. NULL 값 처리

left join은 오른쪽 테이블에 일치하는 데이터가 없는 경우에도 결과를 생성한다.

해당 경우에는 오른쪽 테이블의 컬럼에 NULL 값을 할당한다.

 

데이터가 부족한 경우에도 왼쪽 테이블의 모든 데이터를 유지하면서 연결 된 데이터를 가져오기 때문에 

NULL값 처리가 필요할 때 left join을 사용한다.

 

따라서 left join은 왼쪽 테이블의 데이터를 중심으로 한 데이터 집합이 필요할때 사용된다

LEFT join은 다음과 같은 상황에서 사용할 수 있다.

1. 부모 자식 관계에서 자식 테이블의 모든 행을 가져와야 할 때

예를 들어, 부모 테이블(주문)과 자식 테이블(주문 상세) 가 있을 때, 모든 주문에 대해 상세 정보가 있는지 확인하고 싶을 때 left join을 사용한다. 이 경우 모든 주문에 대해 주문 상세 정보가 없는 경우도 포함하여 결과를 조회할 수 있다.

 

2. 선택적으로 연결된 데이터를 가져와야 할 때

한 테이블에서는 모든 데이터가 있지만 다른 테이블에서는 일치하는 데이터가 없는 경우에 left join을 사용하여 데이터를 가져올 수 있다.

 

예를 들어, 사용자 테이블과 사용자가 작성한 포스트 테이블이 있을 때 모든 사용자의 포스트를 가져오는 경우

left join을 사용하여 사용자가 포스트를 작성하지 않은 경우에도 사용자 정보와 함께 null 값을 출력할 수 있다.

 

3. 기준 테이블의 모든 행을 유지하며 다른 테이블과 결합해야 할 때

기준 테이블의 모든 행을 포함하면서 다른 테이블과의 관계를 확인할 수 있다.

 

예를 들어, 지역 테이블과 판매자 테이블이 있을 때 모든 지역에 대해 판매자의 수를 확인하고 싶을 때 left join을 사용하여 모든 지역을 포함하는 결과를 얻을 수 있다.

 

 

 

 

 

'CS > DATABASE' 카테고리의 다른 글

Apache Kafka  (0) 2024.08.14
기본키와 외래키  (1) 2024.08.13
h2 데이터베이스 사용법  (0) 2024.08.01
CRUD (create, read, update, delete)  (0) 2024.06.26
데이터 베이스의 개념  (0) 2024.01.08

+ Recent posts