Narzędzia użytkownika

Narzędzia witryny


notatki:mysql_sakila

To jest stara wersja strony!


Przykłady zapytań MySQL na bazie Sakila


Schemat bazy danych.

Baza sakila jest to przykładowa baza jeżeli wybierzemy to będzie instalowana razem ze środowiskiem MySQL community.

Zapytania można wykonać i zaobserwować wyniki za pomocą aplikacji: https://wiki.ostrowski.net.pl/php_mysql/sakila.php

Lista wszystkich filmów z długością i oceną

SELECT title, LENGTH, rating
FROM film;

Top 10 najdłuższych filmów

SELECT title, LENGTH
FROM film
ORDER BY LENGTH DESC
LIMIT 10;

Liczba filmów w każdej kategorii

SELECT c.name AS category, COUNT(*) AS film_count
FROM film_category fc
JOIN category c ON fc.category_id = c.category_id
GROUP BY c.name
ORDER BY film_count DESC;

Średnia długość filmu w każdej kategorii

SELECT c.name AS category, AVG(f.length) AS avg_length
FROM film f
JOIN film_category fc ON f.film_id = fc.film_id
JOIN category c ON fc.category_id = c.category_id
GROUP BY c.name;

Aktorzy, którzy wystąpili w największej liczbie filmów

SELECT a.first_name, a.last_name, COUNT(*) AS film_count
FROM actor a
JOIN film_actor fa ON a.actor_id = fa.actor_id
GROUP BY a.actor_id
ORDER BY film_count DESC
LIMIT 10;

Filmy dostępne w więcej niż 1 języku (jeśli dotyczy)

SELECT f.title, l.name AS LANGUAGE
FROM film f
JOIN LANGUAGE l ON f.language_id = l.language_id;

Lista filmów i nazwisk aktorów w nich grających

SELECT f.title, a.first_name, a.last_name
FROM film f
JOIN film_actor fa ON f.film_id = fa.film_id
JOIN actor a ON fa.actor_id = a.actor_id
ORDER BY f.title;

Klienci, którzy zapłacili najwięcej (Top 10)

SELECT c.first_name, c.last_name, SUM(p.amount) AS total_spent
FROM customer c
JOIN payment p ON c.customer_id = p.customer_id
GROUP BY c.customer_id
ORDER BY total_spent DESC
LIMIT 10;

Ilość wypożyczeń każdego filmu

SELECT f.title, COUNT(r.rental_id) AS rental_count
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.film_id
ORDER BY rental_count DESC;

Najczęściej wypożyczany film

SELECT f.title
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.film_id
ORDER BY COUNT(*) DESC
LIMIT 1;

Klienci z miasta "Dallas"

SELECT c.first_name, c.last_name, a.address
FROM customer c
JOIN address a ON c.address_id = a.address_id
JOIN city ci ON a.city_id = ci.city_id
WHERE ci.city = 'Dallas';

Lista kategorii filmów, których średnia długość przekracza 120 minut

SELECT c.name AS category, AVG(f.length) AS avg_length
FROM film f
JOIN film_category fc ON f.film_id = fc.film_id
JOIN category c ON fc.category_id = c.category_id
GROUP BY c.name
HAVING AVG(f.length) > 120;

Lista wszystkich klientów z liczbą ich wypożyczeń

SELECT c.first_name, c.last_name, COUNT(r.rental_id) AS rentals
FROM customer c
JOIN rental r ON c.customer_id = r.customer_id
GROUP BY c.customer_id
ORDER BY rentals DESC;

Filmy bez wypożyczeń

SELECT f.title
FROM film f
LEFT JOIN inventory i ON f.film_id = i.film_id
LEFT JOIN rental r ON i.inventory_id = r.inventory_id
WHERE r.rental_id IS NULL;

Liczba klientów w każdym kraju

SELECT co.country, COUNT(*) AS customer_count
FROM customer cu
JOIN address a ON cu.address_id = a.address_id
JOIN city ci ON a.city_id = ci.city_id
JOIN country co ON ci.country_id = co.country_id
GROUP BY co.country
ORDER BY customer_count DESC;

Średni czas trwania wypożyczenia (w dniach)

SELECT AVG(DATEDIFF(return_date, rental_date)) AS avg_rental_duration
FROM rental
WHERE return_date IS NOT NULL;

Filmy zawierające słowo "Action" w opisie

SELECT title, description
FROM film
WHERE description LIKE '%Action%';

Filmy z aktorem "PENELOPE GUINESS"

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

Lista klientów, którzy wypożyczyli film w 2006 roku

SELECT DISTINCT c.first_name, c.last_name
FROM customer c
JOIN rental r ON c.customer_id = r.customer_id
WHERE YEAR(r.rental_date) = 2006;

Średnia liczba wypożyczeń per klient

SELECT AVG(rental_count) AS avg_rentals_per_customer
FROM (
    SELECT customer_id, COUNT(*) AS rental_count
    FROM rental
    GROUP BY customer_id
) AS sub;
notatki/mysql_sakila.1747210636.txt.gz · ostatnio zmienione: 2025/05/14 10:17 przez administrator