-
SQL JOIN : 에서 3개 이상 테이블 고객, 주문, 상품 데이터 통합하기"🐬 MySQL/MySQL 키워드 2024. 12. 3. 23:45728x90
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'🐬 MySQL > MySQL 키워드' 카테고리의 다른 글
SQL JOIN: 테이블 간의 데이터 연결, 쉽게 이해하기 (1) 2024.12.02 SQL CASE 문 마스터하기 : 강력한 조건부 표현식 (0) 2024.12.01 SQL LIKE로 데이터 찾기 : SQL 문자열 검색의 핵심 (0) 2024.12.01 SQL LIMIT : 효율적인 데이터 검색의 열쇠 (0) 2024.12.01 DISTINCT 키워드 마스터하기 : SQL에서 유니크한 값만 추출하기 (0) 2024.12.01