Database - Chapter 4-22. 2) 실습 - mysqlsample data 분석(1/2)

2025. 3. 21. 10:28·Database

 

MySQL Sample Database 분석 및 실습 가이드

1. 개요

  • MySQL 샘플 데이터베이스(mysqlsample)를 활용하여 SQL의 다양한 기능을 실습합니다.
  • 테이블 간 관계를 이해하고 기본 조회, 조인, 그룹 쿼리, 서브쿼리, 데이터 수정 등을 학습합니다.

2. ERD (Entity Relationship Diagram)

아래 ERD(개체 관계 다이어그램)는 mysqlsample 데이터베이스의 테이블 구조와 관계를 나타냅니다.

3. 기본 조회 및 필터링

  • 고객 목록 조회: 모든 고객의 정보를 조회합니다.
    SELECT * FROM customers;
    
  • 특정 제품 라인의 제품 조회 (Classic Cars)
    SELECT * FROM products WHERE productLine = 'Classic Cars';
    
  • 최근 10개의 주문 조회 (orderDate 기준 최신순)
    SELECT * FROM orders ORDER BY orderDate DESC LIMIT 10;
    
  • 100달러 이상 결제된 거래 조회
    SELECT * FROM payments WHERE amount >= 100;
    

4. JOIN을 활용한 테이블 결합

  • 고객과 주문 정보 조합
    SELECT o.orderNumber, c.customerName
    FROM orders o
    JOIN customers c ON o.customerNumber = c.customerNumber;
    
  • 제품과 제품 라인 정보 조회
    SELECT p.productName, pl.textDescription
    FROM products p
    JOIN productlines pl ON p.productLine = pl.productLine;
    
  • 직원과 직속 상사(매니저) 정보 조회
    SELECT e1.employeeNumber, e1.firstName, e1.lastName,
           e2.firstName AS ManagerFirstName, e2.lastName AS ManagerLastName
    FROM employees e1
    LEFT JOIN employees e2 ON e1.reportsTo = e2.employeeNumber;
    
  • 특정 사무실에서 근무하는 직원 목록 (San Francisco)
    SELECT e.employeeNumber, e.firstName, e.lastName
    FROM employees e
    JOIN offices o ON e.officeCode = o.officeCode
    WHERE o.city = 'San Francisco';
    

5. 그룹 쿼리 (GROUP BY 활용)

  • 제품 라인별 제품 수 조회
    SELECT productLine, COUNT(*) AS productCount FROM products GROUP BY productLine;
    
  • 고객별 총 주문 금액 계산
    SELECT c.customerNumber, c.customerName, SUM(od.quantityOrdered * od.priceEach) AS totalAmount
    FROM customers c
    JOIN orders o ON c.customerNumber = o.customerNumber
    JOIN orderdetails od ON o.orderNumber = od.orderNumber
    GROUP BY c.customerNumber, c.customerName;
    
  • 가장 많이 팔린 제품 조회
    SELECT p.productName, SUM(od.quantityOrdered) AS totalQuantity
    FROM orderdetails od
    JOIN products p ON od.productCode = p.productCode
    GROUP BY p.productName
    ORDER BY totalQuantity DESC
    LIMIT 1;
    
  • 매출이 가장 높은 사무실 조회
    SELECT o.city, SUM(od.quantityOrdered * od.priceEach) AS totalSales
    FROM orders ord
    JOIN orderdetails od ON ord.orderNumber = od.orderNumber
    JOIN customers c ON ord.customerNumber = c.customerNumber
    JOIN employees e ON c.salesRepEmployeeNumber = e.employeeNumber
    JOIN offices o ON e.officeCode = o.officeCode
    GROUP BY o.city
    ORDER BY totalSales DESC
    LIMIT 1;
    

6. 서브쿼리 활용

  • 500달러 이상의 총 주문 금액을 기록한 주문 조회
    SELECT orderNumber, SUM(quantityOrdered * priceEach) AS totalAmount
    FROM orderdetails
    GROUP BY orderNumber
    HAVING totalAmount > 500;
    
  • 평균 이상 결제 고객 조회
    SELECT customerNumber, SUM(amount) AS totalPayment
    FROM payments
    GROUP BY customerNumber
    HAVING totalPayment > (SELECT AVG(amount) FROM payments);
    
  • 주문이 없는 고객 조회
    SELECT customerName FROM customers WHERE customerNumber NOT IN (SELECT customerNumber FROM orders);
    
  • 최대 매출 고객 조회
    SELECT c.customerName, SUM(od.quantityOrdered * od.priceEach) AS totalSpent
    FROM customers c
    JOIN orders o ON c.customerNumber = o.customerNumber
    JOIN orderdetails od ON o.orderNumber = od.orderNumber
    GROUP BY c.customerName
    ORDER BY totalSpent DESC
    LIMIT 1;
    

7. 데이터 수정 및 관리 (INSERT, UPDATE 활용)

  • 신규 고객 추가
    INSERT INTO customers (customerName, contactLastName, contactFirstName, phone, addressLine1, city, country, salesRepEmployeeNumber, creditLimit)
    VALUES ('New Customer', 'Doe', 'John', '123-456-7890', '123 Main St', 'New York', 'USA', 1002, 50000.00);
    
  • Classic Cars 제품 라인의 모든 제품 가격 10% 인상
    UPDATE products SET buyPrice = buyPrice * 1.10 WHERE productLine = 'Classic Cars';
    
  • 특정 고객 이메일 업데이트
    UPDATE customers SET email = 'newemail@example.com' WHERE customerNumber = 103;
    
  • 특정 직원을 다른 사무실로 이동
    UPDATE employees SET officeCode = '2' WHERE employeeNumber = 1002;
    

'Database' 카테고리의 다른 글

Database - Chapter 5-28. PyMySQL 연습(1/3)  (0) 2025.03.24
Database - Chapter 4-22. 2) 실습 - mysqlsample data 분석(2/2)  (0) 2025.03.21
Database - Chapter 3-21 실습 -간단한 스키마 설계하기  (0) 2025.03.20
Database - Chapter 3-20. SQL (DML) 심화(데이터 조인)  (0) 2025.03.20
Database - Chapter 3-19. SQL (DML) 심화(파이썬으로 데이터 랜덤 생성)  (0) 2025.03.20
'Database' 카테고리의 다른 글
  • Database - Chapter 5-28. PyMySQL 연습(1/3)
  • Database - Chapter 4-22. 2) 실습 - mysqlsample data 분석(2/2)
  • Database - Chapter 3-21 실습 -간단한 스키마 설계하기
  • Database - Chapter 3-20. SQL (DML) 심화(데이터 조인)
Chansman
Chansman
안녕하세요! 코딩을 시작한 지 얼마 되지 않은 초보 개발자 찬스맨입니다. 이 블로그는 제 학습 기록을 남기고, 다양한 코딩 실습을 통해 성장하는 과정을 공유하려고 합니다. 초보자의 눈높이에 맞춘 실습과 팁, 그리고 개발하면서 겪은 어려움과 해결 과정을 솔직하게 풀어내려 합니다. 함께 성장하는 개발자 커뮤니티가 되기를 바랍니다.
  • Chansman
    찬스맨의 프로그래밍 스토리
    Chansman
  • 전체
    오늘
    어제
    • 분류 전체보기 (727) N
      • Python (32)
      • 프로젝트 (55) N
      • 과제 (25)
      • Database (40)
      • 멘토링 (11)
      • 특강 (37)
      • 기술블로그 (41) N
      • 기술블로그-Fastapi편 (33)
      • 기술블로그-Django편 (153)
      • 기술블로그-Flask편 (36)
      • AI 분석 (5) N
      • HTML & CSS (31)
      • JavaScript (17)
      • AWS_Cloud (21)
      • 웹스크래핑과 데이터 수집 (14)
      • Flask (42)
      • Django (77)
      • Fastapi (16)
      • 연예 (10) N
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    hotcoffeecase
    newpoliticalparty
    foodshortage
    뷔전역
    뷔
    urbantrends
    뷔제대
    militarydischarge
    skincancerawareness
    basalcellcarcinoma
    americanlaw
    chansmannewspick
    homebartrend
    oliveoilhealth
    galaxys25ultra
    evoo
    bts
    americaparty
    lawsuitculture
    classaction
    RM
    btsreunion
    smartphonedurability
    chinanightlife
    japanricecrisis
    globaleconomy
    trumpmuskclash
    youngprofessionals
    livebroadcast
    titaniumcase
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Chansman
Database - Chapter 4-22. 2) 실습 - mysqlsample data 분석(1/2)
상단으로

티스토리툴바