Database

Chapter 7-37. Mini Project : 06.Sakila SQL(1/2)

Chansman 2025. 3. 26. 12:08

📊 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로 손풀기! 🧠💪