FULL OUTER JOIN의 개념과 활용 방법

1. 핵심 원리
FULL OUTER JOIN은 두 개 이상의 테이블을 조인할 때, 각 테이블의 모든 데이터를 출력하고, 일치하지 않는 데이터는 NULL로 표시합니다. LEFT OUTER JOIN과 RIGHT OUTER JOIN을 결합하여 전체 데이터를 표시하는 방법입니다.

2. 실무에서 쓰이는 이유
FULL OUTER JOIN은 두 개의 테이블에서 모두 포함된 데이터를 반환하고, 어느 한쪽에만 있는 데이터를 포함하여 분석이 필요한 경우에 유용합니다. 특히, 데이터베이스의 테이블 간의 관계를 완전히 이해하고자 할 때 사용됩니다.

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

  • 고객 정보 테이블과 주문 테이블을 조인할 때, 모든 고객과 그들의 주문 내역을 조회하되, 주문이 없는 고객 정보도 포함하여 분석하는 경우에 사용할 수 있습니다.
  • 직원 정보와 프로젝트 배정 테이블을 조인하여, 모든 직원의 프로젝트 배정 상황을 확인하고, 프로젝트가 배정되지 않은 직원도 포함하여 분석할 때 유용합니다.

4. 자주 사용되는 윈도우 표시 및 설명

  • ROW_NUMBER(): 각 그룹 내에서 행 번호를 부여하는 함수로, 특정 기준으로 정렬된 데이터에서 순위를 매길 때 사용됩니다.
  SELECT ename, sal, ROW_NUMBER() OVER (ORDER BY sal DESC) AS row_num
  FROM emp;
  • RANK(): 동일한 값을 가지는 행에 동일한 순위를 부여하며, 그 다음 순위는 건너뛰는 함수입니다.
  SELECT ename, sal, RANK() OVER (ORDER BY sal DESC) AS rank
  FROM emp;
  • DENSE_RANK(): 동일한 값을 가지는 행에 동일한 순위를 부여하지만, 그 다음 순위를 건너뛰지 않는 함수입니다.
  SELECT ename, sal, DENSE_RANK() OVER (ORDER BY sal DESC) AS dense_rank
  FROM emp;
  • NTILE(n): 결과 집합을 n개의 그룹으로 나누고 각 행에 그룹 번호를 부여하는 함수입니다.
  SELECT ename, sal, NTILE(4) OVER (ORDER BY sal DESC) AS ntile
  FROM emp;

5. 연습 문제

  • FULL OUTER JOIN을 사용하여 emp 테이블과 dept 테이블을 조인한 후, 모든 직원의 이름과 부서 위치를 출력하세요. 부서 정보가 없는 직원도 포함됩니다.

6. 연습 문제 해답 및 테이블 표시

SELECT e.ename AS 이름, e.job AS 직업, e.sal AS 월급, d.loc AS 부서 위치
FROM emp e FULL OUTER JOIN dept d
ON (e.deptno = d.deptno);
이름직업월급부서 위치
KINGPRESIDENT5000NEW YORK
BLAKEMANAGER2850CHICAGO
CLARKMANAGER2450NEW YORK
JACKANALYST3000BOSTON

7. 응용 문제

  • FULL OUTER JOIN을 사용하여 모든 직원의 이름과 그들이 속한 부서의 위치를 출력하세요. 만약 부서가 존재하지 않는 직원이라면 “부서 없음”이라는 값을 출력하세요.

8. 응용 문제 해답 및 테이블 표시

SELECT e.ename AS 이름, e.job AS 직업, e.sal AS 월급, 
       COALESCE(d.loc, '부서 없음') AS 부서 위치
FROM emp e FULL OUTER JOIN dept d
ON (e.deptno = d.deptno);
이름직업월급부서 위치
KINGPRESIDENT5000NEW YORK
BLAKEMANAGER2850CHICAGO
CLARKMANAGER2450NEW YORK
JACKANALYST3000부서 없음

9. 전자상거래 업계에서 쓰일 수 있는 경우 예측

  • 고객 정보와 주문 정보를 조인하여 모든 고객과 그들의 주문 내역을 조회할 때, 주문 내역이 없는 고객도 포함하여 분석하는 경우.
  • 제품 정보와 판매 정보를 조인하여, 모든 제품의 판매 내역을 조회하고, 판매 내역이 없는 제품도 포함하여 재고를 관리할 때.

10. 전자상거래 업계에서 사용할 수 있는 경우 예상 상황 문제 2가지 및 그 경우에 대한 SQL 코드 작성
(1) 모든 고객과 그들의 주문 내역을 조회하세요. 주문이 없는 고객도 포함됩니다.

SELECT c.customer_name, o.order_id, o.order_date
FROM customers c FULL OUTER JOIN orders o
ON c.customer_id = o.customer_id;

(2) 모든 제품의 정보와 판매 내역을 조회하세요. 판매 내역이 없는 제품도 포함됩니다.

SELECT p.product_name, s.sale_date, s.quantity
FROM products p FULL OUTER JOIN sales s
ON p.product_id = s.product_id;

11. 10번에 대한 SQL 코드를 시각적으로 이해하기 쉽도록 테이블 예시 작성

고객 정보와 주문 내역 조회 테이블 예시

customer_nameorder_idorder_date
John Doe1012023-01-15
Jane Smith1022023-01-16
Alice BrownNULLNULL

제품 정보와 판매 내역 조회 테이블 예시

Laptop2023-02-105
Smartphone2023-02-1110
TabletNULLNULL
Posts created 411

Related Posts

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

Back To Top