ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • SQL JOIN : 에서 3개 이상 테이블 고객, 주문, 상품 데이터 통합하기"
    🐬 MySQL/MySQL 키워드 2024. 12. 3. 23:45
    728x90

    SQL에서 3개 이상의 테이블을 JOIN하는 방법에 대해 알아보겠습니다. 

    실제 비즈니스 시나리오를 바탕으로 고객, 주문, 상품 데이터를 통합하는 과정을 살펴보겠습니다.


    우리의 데이터 구조

    먼저, 우리가 다룰 4개의 테이블을 소개하겠습니다

    customers 테이블: 고객 정보 (customer_name, email, address)

    orders 테이블: 주문 정보 (일부 고객의 여러 구매 기록, 구매 없는 고객도 포함)

    products 테이블: 상품 정보 (product_name, price)

    order_items 테이블: 주문 항목 정보 (한 주문당 여러 상품 포함 가능)

     

    여러 테이블 JOIN하기

    이제 이 테이블들을 JOIN하여 유용한 정보를 추출해보겠습니다.

     

    예제 1: 고객별 주문 정보 조회

    SELECT 
        c.customer_name, 
        c.email, 
        o.order_id, 
        p.product_name, 
        oi.quantity, 
        p.price
    FROM 
        customers c
    LEFT JOIN orders o ON c.customer_id = o.customer_id
    LEFT JOIN order_items oi ON o.order_id = oi.order_id
    LEFT JOIN products p ON oi.product_id = p.product_id;

    이 쿼리는 다음과 같은 정보를 제공합니다


    모든 고객의 이름과 이메일
    각 고객의 주문 ID (있는 경우)
    주문한 상품의 이름, 수량, 가격
    LEFT JOIN을 사용하여 주문하지 않은 고객도 결과에 포함시킵니다


    예제 2: 총 주문 금액이 가장 높은 고객 찾기

    SELECT 
        c.customer_name, 
        SUM(oi.quantity * p.price) as total_spent
    FROM 
        customers c
    INNER JOIN orders o ON c.customer_id = o.customer_id
    INNER JOIN order_items oi ON o.order_id = oi.order_id
    INNER JOIN products p ON oi.product_id = p.product_id
    GROUP BY 
        c.customer_id, c.customer_name
    ORDER BY 
        total_spent DESC
    LIMIT 1;

    이 쿼리는 다음을 수행합니다
    모든 주문 항목의 총 금액을 계산
    고객별로 총 주문 금액을 합산
    가장 많은 금액을 지출한 고객을 찾아 표시
    INNER JOIN을 사용하여 실제 주문이 있는 고객만 포함시킵니다

     

    주의사항

    • JOIN 순서: 테이블을 JOIN할 때 순서가 중요합니다. 특히 LEFT JOIN을 사용할 때 기준이 되는 테이블을 먼저 명시해야 합니다
    • 성능 고려: 많은 테이블을 JOIN할수록 쿼리 실행 시간이 길어질 수 있습니다. 필요한 데이터만 선택적으로 JOIN하는 것이 좋습니다
    • 명확한 열 지정: 여러 테이블에 같은 이름의 열이 있을 수 있으므로, 열을 참조할 때 테이블 이름이나 별칭을 사용하는 것이 좋습니다
    • 이렇게 3개 이상의 테이블을 JOIN하면 복잡한 비즈니스 질문에 답할 수 있는 강력한 쿼리를 만들 수 있습니다. 
    728x90
Designed by Tistory.