쿼리 작성 실습

고객과 주문 정보 조회

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
);

주문이 있는 고객만 조회