쿼리 작성 실습
고객과 주문 정보 조회
SELECT c.customer_id 고객번호, c.name 고객명, o.order_id 주문번호
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;
모든 고객과 해당 주문 정보 조회 (주문 없는 고객도 표시)
SELECT c.customer_id 고객번호, c.name 고객명, o.order_id 주문번호
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;
모든 직원과 그들이 처리한 주문 조회 (주문 없는 직원도 표시)
SELECT e.employee_id 직원번호, e.name 직원명, o.order_id 주문번호
FROM EMPLOYEES e
LEFT JOIN ORDERS o ON e.employee_id = o.employee_id;
모든 고객과 모든 리뷰 정보 조회 (리뷰 없는 고객, 고객 정보 없는 리뷰도 표시)
SELECT c.customer_id 고객번호, c.name 고객명, r.review_id 리뷰번호, r.rating 평점
FROM CUSTOMERS c
FULL OUTER JOIN PRODUCT_REVIEWS r ON c.customer_id = r.customer_id;
직원과 그들의 관리자 정보 조회
SELECT e.employee_id 직원번호, e.name 직원명, m.employee_id 관리자번호, m.name 관리자명
FROM EMPLOYEES e
LEFT JOIN EMPLOYEES m ON e.manager_id = m.employee_id;
주문, 고객, 직원, 부서 정보 함께 조회
SELECT o.order_id 주문번호, c.name 고객명, e.name 직원명, d.department_name 부서명
FROM ORDERS o
JOIN CUSTOMERS c ON o.customer_id = c.customer_id
LEFT JOIN EMPLOYEES e ON o.employee_id = e.employee_id
LEFT JOIN DEPARTMENTS d ON e.department_id = d.department_id;
카테고리별 주문 총액 조회
SELECT c.category_id 카테고리번호, c.category_name 카테고리명, SUM(oi.quantity * (oi.unit_price - oi.discount)) 총주문금액
FROM ORDER_ITEMS oi
JOIN PRODUCTS p ON oi.product_id = p.product_id
JOIN CATEGORIES c ON p.category_id = c.category_id
GROUP BY c.category_id, c.category_name;
평균 이상 리뷰 점수를 받은 제품 조회
SELECT p.product_name 상품명, ROUND(r.avg_rating, 1) 평균평점
FROM PRODUCTS p
JOIN (
SELECT product_id, AVG(rating) avg_rating
FROM PRODUCT_REVIEWS
GROUP BY product_id
HAVING AVG(rating) >= (SELECT AVG(rating) FROM PRODUCT_REVIEWS)
) r ON p.product_id = r.product_id;
리뷰가 없는 제품 조회
SELECT p.product_id 상품번호, p.product_name 상품명
FROM PRODUCTS p
WHERE NOT EXISTS (
SELECT 1 FROM PRODUCT_REVIEWS r WHERE r.product_id = p.product_id
);
주문이 있는 고객만 조회