From fff62933d44962283bb47d07f8f3858408188a61 Mon Sep 17 00:00:00 2001 From: Diego fornero <157987989+furby990@users.noreply.github.com> Date: Sat, 11 Apr 2026 17:36:30 +0200 Subject: [PATCH] Add files via upload --- lab-sql-joins.sql | 170 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 170 insertions(+) create mode 100644 lab-sql-joins.sql diff --git a/lab-sql-joins.sql b/lab-sql-joins.sql new file mode 100644 index 0000000..44ae251 --- /dev/null +++ b/lab-sql-joins.sql @@ -0,0 +1,170 @@ +CREATE DATABASE sakila; +USE sakila; +SHOW TABLES; + +SHOW TABLES IN sakila; +SELECT * FROM sakila.actor; +SELECT * FROM sakila.film; +SELECT * FROM sakila.customer; +SELECT title FROM sakila.film; +SELECT title FROM film; +SELECT first_name FROM staff; +SELECT COUNT(*) AS total_stores FROM store; +SELECT COUNT(*) AS total_staff FROM staff; +SELECT COUNT(*) AS available_films FROM inventory; +SELECT COUNT(*) AS rented_films FROM rental; +SELECT COUNT(DISTINCT last_name) AS unique_last_names FROM actor; +SELECT title, length +FROM film +ORDER BY length DESC +LIMIT 10; +SELECT * +FROM actor +WHERE first_name = 'SCARLETT'; +SELECT * +FROM film +WHERE title LIKE '%ARMAGEDDON%' +AND length > 100; +SELECT COUNT(*) AS behind_the_scenes_films +FROM film +WHERE special_features LIKE '%Behind the Scenes%'; +SELECT + MAX(length) AS max_duration, + MIN(length) AS min_duration +FROM film; +SELECT + FLOOR(AVG(length) / 60) AS hours, + FLOOR(AVG(length) % 60) AS minutes +FROM film; +SELECT + DATEDIFF(MAX(rental_date), MIN(rental_date)) AS operating_days +FROM rental; +SELECT + rental_id, + rental_date, + MONTH(rental_date) AS month, + DAYNAME(rental_date) AS weekday +FROM rental +LIMIT 20; +SELECT + rental_id, + rental_date, + DAYNAME(rental_date) AS weekday, + CASE + WHEN DAYNAME(rental_date) IN ('Saturday', 'Sunday') THEN 'weekend' + ELSE 'workday' + END AS day_type +FROM rental +LIMIT 20; +SELECT + title, + IFNULL(rental_duration, 'Not Available') AS rental_duration +FROM film +ORDER BY title ASC; +SELECT + CONCAT(first_name, ' ', last_name) AS full_name, + SUBSTRING(email, 1, 3) AS email_prefix +FROM customer +ORDER BY last_name ASC; +SELECT COUNT(*) AS total_films +FROM film; +SELECT + rating, + COUNT(*) AS total +FROM film +GROUP BY rating; +SELECT + rating, + COUNT(*) AS total +FROM film +GROUP BY rating +ORDER BY total DESC; +SELECT + rating, + ROUND(AVG(length), 2) AS avg_duration +FROM film +GROUP BY rating +ORDER BY avg_duration DESC; +SELECT + rating, + ROUND(AVG(length), 2) AS avg_duration +FROM film +GROUP BY rating +HAVING AVG(length) > 120; +SELECT + last_name +FROM actor +GROUP BY last_name +HAVING COUNT(*) = 1; +SELECT + c.name AS category, + COUNT(fc.film_id) AS total_films +FROM category c +JOIN film_category fc ON c.category_id = fc.category_id +GROUP BY c.name; +SELECT + s.store_id, + ci.city, + co.country +FROM store s +JOIN address a ON s.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; +SELECT + s.store_id, + SUM(p.amount) AS total_revenue +FROM payment p +JOIN staff st ON p.staff_id = st.staff_id +JOIN store s ON st.store_id = s.store_id +GROUP BY s.store_id; +SELECT + c.name AS category, + ROUND(AVG(f.length), 2) AS avg_duration +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; +SELECT + c.name AS category, + ROUND(AVG(f.length), 2) AS avg_duration +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 +ORDER BY avg_duration DESC; +SELECT + f.title, + COUNT(r.rental_id) AS times_rented +FROM rental r +JOIN inventory i ON r.inventory_id = i.inventory_id +JOIN film f ON i.film_id = f.film_id +GROUP BY f.title +ORDER BY times_rented DESC +LIMIT 10; +SELECT + f.title, + COUNT(r.rental_id) AS times_rented +FROM rental r +JOIN inventory i ON r.inventory_id = i.inventory_id +JOIN film f ON i.film_id = f.film_id +GROUP BY f.title +ORDER BY times_rented DESC +LIMIT 10; +SELECT + f.title, + i.store_id, + COUNT(i.inventory_id) AS copies_available +FROM film f +JOIN inventory i ON f.film_id = i.film_id +WHERE f.title = 'ACADEMY DINOSAUR' +AND i.store_id = 1 +GROUP BY f.title, i.store_id; +SELECT + f.title, + CASE + WHEN COUNT(i.inventory_id) > 0 THEN 'Available' + ELSE 'NOT available' + END AS availability +FROM film f +LEFT JOIN inventory i ON f.film_id = i.film_id +GROUP BY f.title;