SQL OUTER JOIN으로 비대칭 데이터 조인

이제 OUTER JOIN에 대해 설명드리겠습니다.

1. 핵심 원리

OUTER JOIN은 두 테이블을 조인할 때, 어느 한쪽 테이블에만 존재하는 데이터도 포함하여 결과를 반환하는 조인 방식입니다. OUTER JOIN에는 크게 세 가지 유형이 있습니다:

  • LEFT OUTER JOIN: 왼쪽 테이블의 모든 데이터를 반환하고, 오른쪽 테이블에 일치하는 데이터가 없으면 NULL 값을 반환합니다.
  • RIGHT OUTER JOIN: 오른쪽 테이블의 모든 데이터를 반환하고, 왼쪽 테이블에 일치하는 데이터가 없으면 NULL 값을 반환합니다.
  • FULL OUTER JOIN: 두 테이블의 모든 데이터를 반환하고, 어느 한쪽에만 존재하는 데이터에 대해서는 NULL 값을 반환합니다.

2. 실무에서 쓰이는 이유

실무에서 OUTER JOIN은 다음과 같은 이유로 사용됩니다:

  • 비대칭 데이터 조인: 두 테이블의 데이터가 완전히 일치하지 않을 때, 한쪽 테이블에만 존재하는 데이터까지 모두 포함하여 분석할 수 있습니다.
  • 결측값 분석: 한 테이블에만 존재하는 데이터를 쉽게 식별하여 결측값을 처리하거나 분석할 수 있습니다.

3. 실무에서 구체적으로 사용되는 상황

OUTER JOIN은 다음과 같은 상황에서 자주 사용됩니다:

  • 제품 목록과 주문 목록: 제품이 주문되지 않았거나, 주문 내역에 없는 제품도 포함하여 전체 목록을 조회할 때.
  • 고객과 서비스 내역: 모든 고객을 조회하면서 아직 서비스를 이용하지 않은 고객도 포함하여 분석할 때.

예상 상황 예측:

  • 예시 1: 모든 고객의 목록을 조회하면서 서비스 이용 내역이 없는 고객도 함께 조회.
  • 예시 2: 모든 제품을 조회하면서 현재 주문 내역이 없는 제품도 함께 조회.

4. 자주 사용되는 윈도우 방식 및 설명

OUTER JOIN에서는 LEFT JOIN, RIGHT JOIN, FULL JOIN을 사용하여 각 조인 방식에 맞는 결과를 얻습니다.

  1. LEFT OUTER JOIN
  • 설명: 왼쪽 테이블의 모든 행을 포함하고, 오른쪽 테이블에 일치하는 행이 없는 경우 NULL을 반환합니다.
  • 사용 예시:
    sql SELECT e.ename, d.loc FROM emp e LEFT JOIN dept d ON e.deptno = d.deptno;
  1. RIGHT OUTER JOIN
  • 설명: 오른쪽 테이블의 모든 행을 포함하고, 왼쪽 테이블에 일치하는 행이 없는 경우 NULL을 반환합니다.
  • 사용 예시:
    sql SELECT e.ename, d.loc FROM emp e RIGHT JOIN dept d ON e.deptno = d.deptno;
  1. FULL OUTER JOIN
  • 설명: 두 테이블의 모든 행을 포함하고, 일치하지 않는 경우에는 NULL을 반환합니다.
  • 사용 예시:
    sql SELECT e.ename, d.loc FROM emp e FULL JOIN dept d ON e.deptno = d.deptno;

5. 연습 문제

문제 1:

students 테이블과 courses 테이블을 조인하여 모든 학생과 그들이 수강 중인 과목을 조회하는 SQL 쿼리를 작성하시오. 수강 중인 과목이 없는 학생도 포함합니다.

  • students 테이블 열: student_id, student_name
  • courses 테이블 열: course_id, student_id, course_name

문제 2:

employees 테이블과 projects 테이블을 조인하여 모든 직원과 그들이 참여 중인 프로젝트를 조회하는 SQL 쿼리를 작성하시오. 프로젝트에 참여하지 않은 직원도 포함합니다.

  • employees 테이블 열: employee_id, name
  • projects 테이블 열: project_id, employee_id, project_name

6. 연습 문제 해답

해답 1:

SELECT s.student_name, c.course_name
FROM students s LEFT JOIN courses c ON s.student_id = c.student_id;

해답 2:

SELECT e.name, p.project_name
FROM employees e LEFT JOIN projects p ON e.employee_id = p.employee_id;

7. 응용 문제

문제 1:

customers 테이블과 orders 테이블을 조인하여 모든 고객과 그들이 주문한 내역을 조회하는 SQL 쿼리를 작성하시오. 주문하지 않은 고객도 포함합니다.

  • customers 테이블 열: customer_id, customer_name
  • orders 테이블 열: order_id, customer_id, order_date

문제 2:

teachers 테이블과 classes 테이블을 조인하여 모든 교사와 그들이 담당하는 수업을 조회하는 SQL 쿼리를 작성하시오. 담당 수업이 없는 교사도 포함합니다.

  • teachers 테이블 열: teacher_id, teacher_name
  • classes 테이블 열: class_id, teacher_id, class_name

8. 응용 문제 해답

해답 1:

SELECT c.customer_name, o.order_date
FROM customers c LEFT JOIN orders o ON c.customer_id = o.customer_id;

해답 2:

SELECT t.teacher_name, cl.class_name
FROM teachers t LEFT JOIN classes cl ON t.teacher_id = cl.teacher_id;

9. 전자상거래 업계에서의 사용 예시

사용될 수 있는 경우 예측:

  • 고객 목록과 주문 내역: 모든 고객을 조회하면서 주문 내역이 없는 고객도 포함하여 분석할 때.
  • 제품 목록과 재고 상태: 모든 제품을 조회하면서 재고 상태가 없는 제품도 함께 조회할 때.

예상 상황 문제:

  1. 고객 테이블과 주문 테이블을 조인하여 모든 고객과 그들의 최근 주문 내역을 조회하는 SQL 쿼리를 작성하시오. 주문 내역이 없는 고객도 포함합니다.
  2. 제품 테이블과 재고 테이블을 조인하여 모든 제품과 그들의 재고 상태를 조회하는 SQL 쿼리를 작성하시오. 재고 상태가 없는 제품도 포함합니다.

SQL 코드 및 시각적 예시

문제 1 SQL 코드:

SELECT c.customer_name, o.order_date
FROM customers c LEFT JOIN orders o ON c.customer_id = o.customer_id;
예시 테이블:
customer_nameorder_date
Alice2024-08-01
BobNULL
Charlie2024-07-31

문제 2 SQL 코드:

SELECT p.product_name, i.quantity
FROM products p LEFT JOIN inventory i ON p.product_id = i.product_id;
예시 테이블:
product_namequantity
Product A100
Product BNULL
Product C50

Posts created 411

Related Posts

Begin typing your search term above and press enter to search. Press ESC to cancel.

Back To Top