From f8adec1fb6a7bd99238ce5a1311533446c2bbe45 Mon Sep 17 00:00:00 2001 From: bperezlovisolo Date: Wed, 28 Jan 2026 17:12:02 +0100 Subject: [PATCH 1/2] lab-sql-join --- lab-sql-joins.sql | 100 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 100 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..8b433d4 --- /dev/null +++ b/lab-sql-joins.sql @@ -0,0 +1,100 @@ +USE sakila; + +SELECT +category_id, +COUNT(film_id) as num_films +FROM film_category +GROUP BY category_id; + + +-- store_id y address_id en store +-- address_id y city_id en address +-- city_id, city y country_ id en city +-- country_id y country en country + +SELECT +st.store_id, +c.city, +co.country +FROM country AS co +INNER JOIN city AS c +ON c.country_id = co.country_id +INNER JOIN address AS ad +ON c.city_id = ad.city_id +INNER JOIN store AS st +ON ad.address_id = st.address_id; + +SELECT * +FROM store; + +SELECT +st.store_id, +SUM(pay.amount) +FROM store AS st +LEFT JOIN payment AS pay +ON st.manager_staff_id = pay.staff_id +GROUP BY st.store_id; + +SELECT * +FROM film_category; + +SELECT +c.name, +AVG(length) AS avg_length +FROM film AS f +INNER JOIN film_category AS fc +ON f.film_id = fc.film_id +INNER JOIN category AS c +ON c.category_id = fc.category_id +GROUP BY c.name +ORDER BY avg_length DESC; + +SELECT +c.name, +AVG(length) AS avg_length +FROM film AS f +INNER JOIN film_category AS fc +ON f.film_id = fc.film_id +INNER JOIN category AS c +ON c.category_id = fc.category_id +GROUP BY c.name +ORDER BY avg_length DESC +LIMIT 1; + +SELECT * +FROM inventory; + +SELECT +title, +COUNT(rental_id) AS num_rental +FROM rental AS r +INNER JOIN inventory AS i +ON r.inventory_id = i.inventory_id +INNER JOIN film as f +ON f.film_id = i.film_id +GROUP BY title +ORDER BY num_rental DESC +LIMIT 10; + +SELECT + CASE + WHEN COUNT(*) > 0 THEN 'Available' + ELSE 'Not Available' + END AS availability +FROM inventory +WHERE film_id = 1 AND store_id = 1; + +SELECT * +FROM inventory; + +SELECT +title, + CASE + WHEN i.inventory_id IS NOT NULL THEN 'Available' + ELSE 'NOT available' + END AS availability +FROM film AS f +LEFT JOIN inventory AS i + ON f.film_id = i.film_id; + + From 7eed6e4b0c109e36d376bf5884d620fd5f65603a Mon Sep 17 00:00:00 2001 From: bperezlovisolo Date: Wed, 28 Jan 2026 17:24:33 +0100 Subject: [PATCH 2/2] lab-sql-joins --- lab-sql-joins.sql | 31 +++++++++++++++++-------------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/lab-sql-joins.sql b/lab-sql-joins.sql index 8b433d4..203b99d 100644 --- a/lab-sql-joins.sql +++ b/lab-sql-joins.sql @@ -1,10 +1,10 @@ USE sakila; -SELECT -category_id, -COUNT(film_id) as num_films -FROM film_category -GROUP BY category_id; +SELECT name as categoria, +count(*) as num_films +FROM category +JOIN film_category USING (category_id) +GROUP BY name; -- store_id y address_id en store @@ -12,6 +12,7 @@ GROUP BY category_id; -- city_id, city y country_ id en city -- country_id y country en country + SELECT st.store_id, c.city, @@ -27,20 +28,22 @@ ON ad.address_id = st.address_id; SELECT * FROM store; -SELECT -st.store_id, -SUM(pay.amount) -FROM store AS st -LEFT JOIN payment AS pay -ON st.manager_staff_id = pay.staff_id -GROUP BY st.store_id; +SELECT +store.store_id, +SUM(payment.amount) AS total_revenue +FROM store +JOIN staff +ON store.store_id = staff.store_id +JOIN payment +ON staff.staff_id = payment.staff_id +GROUP BY store.store_id; SELECT * FROM film_category; SELECT c.name, -AVG(length) AS avg_length +ROUND(AVG(length),2) AS avg_length FROM film AS f INNER JOIN film_category AS fc ON f.film_id = fc.film_id @@ -51,7 +54,7 @@ ORDER BY avg_length DESC; SELECT c.name, -AVG(length) AS avg_length +ROUND(AVG(length),2) AS avg_length FROM film AS f INNER JOIN film_category AS fc ON f.film_id = fc.film_id