BBDD PARCIAL SELECTs 23-24 GUILLERMOPEINADO - SQL

Descargar como txt, pdf o txt
Descargar como txt, pdf o txt
Está en la página 1de 3

use sakila;

/
***********************************************************************************
***********************

L@s alumn@s deberán rellenar este documento añadiendo las sentencias


que permitan satisfacer las necesidades que se indican en cada comentario.

Ten en cuenta:
- Debes añadir cada sentencia inmediatamente después del comentario con el
ejercicio al que corresponde
- En cada sentencia, añade un salto de línea por cada clausula o condición que
añadas
- No añadas consultas que no funcionen.

***********************************************************************************
**********************/

/
***********************************************************************************
***********************
Sentencias de consulta de la base de datos 'sakila'. Las consultas puntúan sobre
100 puntos
***********************************************************************************
**********************/

/*1 . Recupera los apellidos de actores sin repetir (campo last_name de la tabla
actor)
cuyos nombres (first_name) terminen en 'n' o en 's' (tanto mayúsculas como
minúsculas)
y que sus identificadores (actor_id) estén comprendidos entre los valores 1 y 200.
Nota: usa el alias 'nombres sin repetir' para representar el campo
'last_name'
puntuación máxima: 5 puntos
*/

SELECT DISTINCT last_name AS "Apellidos Sin Repetir"


FROM actor
WHERE (LOWER(first_name) LIKE '%n' OR LOWER(first_name) LIKE '%s') AND actor_id
BETWEEN 1 AND 200;

/*2. Recupera 5 títulos de películas cuya duración de alquiler (campo


rental_duration) sea superior a 5 días
y el importe de penalización (replacement_cost) sea superior al importe de alquiler
(rental_rate),
ordena la salida por título ascendentemente.
Nota: usa el alias 'titulo_pelicula' para representar el campo 'title'
puntuación máxima: 5 puntos
*/

SELECT title AS "PELICULA"


FROM film
WHERE rental_duration > 5 AND replacement_cost > rental_rate
ORDER BY title ASC
LIMIT 5;

/*3. Recupera el título de una película cualquiera en la que participe una actriz
llamada 'LAURA'
(tablas film, film_actor y actor), ordena la salida por título
descendentemente.
Nota: usa el alias 'titulo_pelicula' para representar el campo 'title'
puntuación máxima: 5 puntos
*/

SELECT f.title AS "PELICULA"


FROM film f,film_actor fa, actor a
WHERE f.film_id=fa.film_id AND fa.actor_id=a.actor_id AND a.first_name='LAURA'
LIMIT 1;

/*4. Recupera el titulo (title) y rating de todas las peliculas


cuyo titulo contenga la cadena de texto 'CI' y termine en 'S' o que el tiempo de
alquiler (rental_duration) no supere los 3 días
ordenados por apellido ascendentemente.
Nota: usa el alias 'titulo' para representar el campo 'title'
puntuación máxima: 5 puntos
*/
SELECT title AS "TITULO", rating
FROM film
WHERE title LIKE '%ci%' AND title LIKE '%s' OR rental_duration <=3
ORDER BY title ASC;

/*5. Recupera los idiomas (name de la tabla language) que no tengan ninguna
película (language_id de la tabla film)
(sin hacer uso uso de subconsultas preferiblemente).
puntuación máxima: 10 puntos
5 puntos si se hace con subconsulta
15 puntos si funciona pero no se usan subconsultas
*/

SELECT l.name AS 'IDIOMA SIN PELICULAS'


FROM language l LEFT JOIN film f ON l.language_id=f.language_id
WHERE f.language_id IS NULL;

/*6. Recupera la dirección (address) y distrito (district) de las tiendas en las


que se haya dado
de alta una cliente que se llame 'KELLY'. Se quiere recuperar la información de
acuerdo a la siguiente salida:
dirección tienda de actrices kelly
----------------------------------------
47 MySakila Drive en el distrito Alberta
puntuación: 10 puntos
*/

SELECT CONCAT(a.address,' En el distrito ', a.district) AS "dirección tienda de


actrices kelly"
FROM address a, customer c, store s
WHERE a.address_id=s.address_id AND c.store_id=s.store_id AND c.first_name
='KELLY';

/*7. Calcula la cuantía total de los pagos (tabla 'payment' y campo 'amount')
realizados por clientes que se llamen 'MARY'
entre el año 2005 y 2007 (campo payment_date).
Nota: usa el alias 'cuantia total' para representar el cálculo
realizado.

cuantía total
-------------
118.68€
puntuación: 10 puntos
*/

SELECT SUM(amount) AS "TOTAL"


FROM payment p, customer c
WHERE p.customer_id = c.customer_id AND c.first_name='MARY' AND EXTRACT(YEAR FROM
payment_date) BETWEEN 2005 AND 2007;

/*8. Recupera el título de las películas y el nombre de la categoría que tenga


asociada.
Deben listarse todas las películas independientemente de que tengan asignada
categoría o no.
puntuación: 15 puntos
*/

SELECT f.title AS 'TITULO', c.name AS 'CATEGORIA'


FROM film f LEFT JOIN film_category fc ON f.film_id=fc.film_id
LEFT JOIN category c ON fc.category_id=c.category_id;

/*9. Recupera el número de películas POR CADA categoría (campo name de la tabla
category) SIEMPRE Y CUANDO
dicho número esté comprendido entre 40 y 60
ordenados por dicho número de forma descendente.
Nota: usa el alias 'categoría' para representar el nombre de la
categoria y el alias 'pelis 40-60' para representar la cantidad de películas.
puntuación: 15 puntos
*/

SELECT c.name AS "CATEGORIA", COUNT(fc.film_id) AS "NºPELICULAS"


FROM category c, film_category fc
WHERE c.category_id = fc.category_id
GROUP BY c.name
HAVING COUNT(fc.film_id) BETWEEN 40 AND 60
ORDER BY COUNT(fc.film_id) DESC;

/*10. Recupera las ciudades donde viven los 2 clientes que más dinero han
gastado en el videoclub (tablas city, address, customer, payment)
puntuación: 15 puntos
*/

SELECT ci.city AS 'CIUDADES'


FROM city ci, address a, customer cu, payment p
WHERE ci.city_id=a.city_id AND a.address_id=cu.address_id AND
p.customer_id=cu.customer_id
GROUP BY cu.customer_id
ORDER BY SUM(p.amount) DESC
LIMIT 2;

También podría gustarte