📊 06. Mini Project 2) Sakila SQL 분석
💡 Sakila DB는 MySQL에서 제공하는 샘플 데이터베이스로, DVD 대여점의 운영 정보를 담고 있습니다. 영화, 배우, 직원, 고객, 대여 등 다양한 관계형 데이터를 연습하기에 최적의 데이터셋입니다.
📌 1️⃣ 특정 배우가 출연한 영화 목록 조회
🎯 문제: 배우 'GUINESS PENELOPE'가 출연한 영화의 제목을 모두 조회하시오.
🧠 해설:
- actor 테이블에서 이름으로 actor_id 조회
- film_actor로 중간 연결
- film 테이블에서 title 추출
✅ 정답 SQL:
SELECT f.title
FROM film f
JOIN film_actor fa ON f.film_id = fa.film_id
JOIN actor a ON fa.actor_id = a.actor_id
WHERE a.first_name = 'PENELOPE' AND a.last_name = 'GUINESS';
📌 2️⃣ 모든 카테고리와 영화 수 조회
🎯 문제: 각 카테고리별 영화 수를 조회하시오.
🧠 해설:
- category 와 film_category 조인
- COUNT()로 집계 후 GROUP BY
✅ 정답 SQL:
SELECT c.name, COUNT(fc.film_id) AS number_of_films
FROM category c
JOIN film_category fc ON c.category_id = fc.category_id
GROUP BY c.name;
📌 3️⃣ 특정 고객의 대여 기록 조회
🎯 문제: 고객 ID가 5인 고객의 대여 영화 목록을 조회하시오.
🧠 해설:
- rental → inventory → film 조인
- customer_id로 필터링
✅ 정답 SQL:
SELECT r.rental_date, f.title
FROM rental r
JOIN inventory i ON r.inventory_id = i.inventory_id
JOIN film f ON i.film_id = f.film_id
WHERE r.customer_id = 5;
📌 4️⃣ 최근에 추가된 10개의 영화 조회
🎯 문제: 가장 최근에 출시된 10개의 영화 제목을 조회하시오.
🧠 해설:
- film 테이블에서 release_year 기준 정렬 후 상위 10개 추출
✅ 정답 SQL:
SELECT title
FROM film
ORDER BY release_year DESC
LIMIT 10;
📌 5️⃣ 특정 영화에 출연한 배우 목록 조회
🎯 문제: 'ACADEMY DINOSAUR'에 출연한 배우 목록을 조회하시오.
🧠 해설:
- film → film_actor → actor 연결
✅ 정답 SQL:
SELECT a.first_name, a.last_name
FROM actor a
JOIN film_actor fa ON a.actor_id = fa.actor_id
JOIN film f ON fa.film_id = f.film_id
WHERE f.title = 'ACADEMY DINOSAUR';
📌 6️⃣ 특정 영화를 대여한 고객 목록 조회
🎯 문제: 'ACADEMY DINOSAUR' 영화를 대여한 고객들의 이름을 조회하시오.
🧠 해설:
- film → inventory → rental → customer 조인
✅ 정답 SQL:
SELECT DISTINCT c.first_name, c.last_name
FROM customer c
JOIN rental r ON c.customer_id = r.customer_id
JOIN inventory i ON r.inventory_id = i.inventory_id
JOIN film f ON i.film_id = f.film_id
WHERE f.title = 'ACADEMY DINOSAUR';
📌 7️⃣ 모든 고객과 가장 최근 대여 영화 조회
🎯 문제: 각 고객별로 가장 최근에 대여한 영화 제목을 조회하시오.
🧠 해설:
- customer → rental → inventory → film 조인
- MAX(rental_date) 사용 후 GROUP BY
✅ 정답 SQL:
SELECT c.customer_id, c.first_name, c.last_name, MAX(r.rental_date) AS last_rental_date, f.title
FROM customer c
JOIN rental r ON c.customer_id = r.customer_id
JOIN inventory i ON r.inventory_id = i.inventory_id
JOIN film f ON i.film_id = f.film_id
GROUP BY c.customer_id, c.first_name, c.last_name, f.title;
📌 8️⃣ 각 영화별 평균 대여 기간 조회
🎯 문제: 영화별 평균 대여 기간을 일 단위로 조회하시오.
🧠 해설:
- rental_date와 return_date 차이를 DATEDIFF()로 계산 후 AVG()
✅ 정답 SQL:
SELECT f.title, AVG(DATEDIFF(r.return_date, r.rental_date)) AS avg_rental_period
FROM film f
JOIN inventory i ON f.film_id = i.film_id
JOIN rental r ON i.inventory_id = r.inventory_id
GROUP BY f.title;
🎯 마무리 요약
- Sakila DB는 SQL 조인, 집계, 필터링, 날짜 함수까지 연습할 수 있는 훌륭한 실습용 데이터셋입니다.
- 배우, 영화, 고객, 대여 정보를 연결하여 다양한 시나리오를 구성할 수 있습니다.
- SQL 연습이 필요할 때 Sakila로 손풀기! 🧠💪
'Database' 카테고리의 다른 글
Chapter 7-40. NoSQL기초 (0) | 2025.03.26 |
---|---|
Chapter 7-38. Mini Project : 06.Sakila SQL(2/2) (0) | 2025.03.26 |
Chapter 6-36. Mini Project : 예스24 베스트셀러 데이터 수집 후 데이터 분석하기(7/7) (0) | 2025.03.25 |
Chapter 6-35. Mini Project : 예스24 베스트셀러 데이터 수집 후 데이터 분석하기(6/7) (0) | 2025.03.25 |
Chapter 6-34. Mini Project : 예스24 베스트셀러 데이터 수집 후 데이터 분석하기(5/7) (0) | 2025.03.25 |