본문 바로가기
카테고리 없음

[SQL] 논리적 조인과 물리적 조인

by hbIncoding 2024. 10. 2.

1. 논리적 조인

  • SQL 쿼리에서 JOIN 문을 사용하여 테이블 간의 관계를 표현하는 방식
  • 논리적 조인은 데이터베이스가 내부적으로 어떤 방식을 조인을 처리할지를 명시하지 않는다.

1) INNER JOIN

  • 두 테이블 간의 공통된 값이 있는 행들만 결합하는 조인
  • 공통 데이터만 필요할 때 유용하다
SELECT employees.name, departments.dept_name
FROM employees
INNER JOIN departments
ON employees.dept_id = departments.dept_id;
  • 직원과 부서 정보를 조인하여 직원이 속한 부서의 이름을 함께 표시하고 싶을 때 사용한다.

 

 

2) LEFT JOIN

  • 왼쪽 테이블의 모든 행을 반환하고, 오른쪽 테이블과 일치하는 데이터가 있으면 그 값을 결합한다.
  • 일치하는 데이터가 없을 경우 오른쪽 테이블의 값은 NULL로 표시된다.
  • 왼쪽 테이블의 데이터를 유지하면서, 오른쪽 테이블에서 일치하는 데이터가 있는 경우에만 추가적으로 결합하고 싶을 때 사용
SELECT employees.name, departments.dept_name
FROM employees
LEFT JOIN departments
ON employees.dept_id = departments.dept_id;
  • employees 데이터를 반환하면서, department 테이블과 dept_id가 일치하는 경우 부서 이름을 결합한다. 일치하지 않는 경우 부서 이름은 NULL로 표시
  • 부서가 아직 배정되지 않은 직원들도 모두 포함한 목록을 얻는다.

3) RIGHT JOIN

  • 오른쪽 테이블의 행을 보두 반환하고, 왼쪽 테이블과 일치하는 데이터가 있으면 그 값을 결합
  • 일치하지 않는 경우 왼쪽 테이블의 값은 NULL로 표기
  • 오른쪽 테이블의 모든 데이터를 유지하면서, 왼쪽 테이블에서 일치하는 데이터를 결합하고 싶을 때 사용
SELECT employees.name, departments.dept_name
FROM employees
RIGHT JOIN departments
ON employees.dept_id = departments.dept_id;
  • departments 데이터를 반환하면서, employees 테이블과 dept_id가 일치하는 경우 직원을 결합합니다. 부서에 속하지 않는 직원은 NULL로 표시됩니다.
  • 부서별로 직원이 배치되지 않은 부서도 포함한 부서 목록을 확인

4) FULL OUTER JOIN 

  • 두 테이블의 모든 데이터를 결합하고, 일치하지 않는 데이터는 NULL로 채워진다.
  • 양쪽 테이블의 데이터를 모두 유지한다.
  • 두 테이블의 모든 데이터를 결합하고 싶고, 일치하지 않는 데이터도 모두 확인하고 싶을 때 사용
SELECT employees.name, departments.dept_name
FROM employees
FULL OUTER JOIN departments
ON employees.dept_id = departments.dept_id;
  • employees와 모든 departments 데이터를 반환하며, 양쪽 테이블에서 일치하지 않는 데이터는 NULL로 표시
  • 모든 직원과 부서 데이터를 얻고, 직원이 배정되지 않은 부서와 소속되지 않은 직원도 포함한 결과를 보고 싶을 때 사용

5) CROSS JOIN

  • CROSS JOIN은 두 테이블의 모든 행을 조합하여 결합합니다. 즉, 두 테이블의 모든 행 간의 카티션 곱(Cartesian Product)을 반환
  • 두 테이블의 모든 데이터 조합이 필요할 때 사용합니다. 예를 들어, 제품과 가능한 모든 옵션의 조합을 계산할 때 유용
SELECT employees.name, departments.dept_name
FROM employees
CROSS JOIN departments;
  • employees의 모든 직원과 departments의 모든 부서 간의 모든 조합을 반환
  • 직원들이 모든 부서에서 일할 가능성을 조사하는 경우, 각 직원과 모든 부서의 조합을 확인하는 데 사용

 

2. 물리적 조인

  • DB 엔진이 실제로 조인 연산을 수행하는 방식
  • 논리적 조인에서 작성한 쿼리를 DB가 처리하는 과정에서 사용하는 최적화된 내부 알고리즘
  • 물리적 조인은 DB가 어떤 방식으로 조인을 수행하여 최상의 성능을 낼 것인지를 결정하는 과정과 관련 있다.
  • 종류
    • Nested Loop Join : 두 테이블의 중첩 루프 방식으로 결합. 작은 데이터 세트에서는 효율적이지만, 데이터가 많아질수록 비효율적
    • Hash Join : 해시 테이블을 사용하여 조인을 수행. 비교적 큰 데이터 세트에서 효율적이며, 조인할 열에 대한 인덱스가 없어도 성능이 좋다.
    • Merge Join : 두 테이블을 각각 정렬한 후 병합하여 조인을 수행. 이미 정렬된 데이터에서 효율적