Está en la página 1de 6

EJERCICIOS SQL SENTENCIA SELECT

Ejecutar el script de creación y carga de base de datos “script movies” (en la imagen siguiente
se muestra el diagrama EER correspondiente a dicha base de datos).

Para esta base de datos, realizar las consultas que se piden a continuación. Indicar para cada
una de ellas la sentencia SQL e incluir el resultado de la ejecución de las mismas.

Consulta 1. Consulta SQL que permita encontrar todos los críticos (nombre) que han hecho una
crítica con valoración 0 (campo rev_stars)

SELECT rev_name FROM reviewer JOIN rating ON reviewer.rev_id = rating.rev_id WHERE


rev_stars = 0;

OTRAS SOLUCIONES:

SELECT rev_name FROM reviewer JOIN rating WHERE reviewer.rev_id = rating.rev_id AND
rev_stars = 0;
SELECT rev_name FROM reviewer NATURAL JOIN rating WHERE rev_stars = 0;
SELECT rev_name FROM reviewer JOIN rating USING (rev_id) WHERE rev_stars = 0;
Consulta 2. Consulta SQL para encontrar a los actores que interpretaron un papel en la película
'Annie Hall' y que devuelva para cada actor el nombre y apellido y el papel que interpretó

SELECT act_fname, act_lname, role FROM actor JOIN movie_cast ON actor.act_id =


movie_cast.act_id JOIN movie ON movie_cast.mov_id = movie.mov_id WHERE mov_title =
'Annie Hall';

OTRA SOLUCIÓN:

SELECT act_fname, act_lname, role FROM actor JOIN movie_cast ON actor.act_id =


movie_cast.act_id JOIN movie ON movie_cast.mov_id = movie.mov_id AND mov_title = 'Annie
Hall';

SELECT act_fname, act_lname, role FROM actor JOIN movie_cast USING(act_id) JOIN movie
USING(mov_id) WHERE mov_title = 'Annie Hall';

Consulta 3. Consulta SQL para identificar al director de la película 'Eyes Wide Shut', debe
devolver el nombre, apellido y título y año de la película

SELECT dir_fname, dir_lname, mov_title, mov_year FROM director JOIN movie_direction ON


director.dir_id = movie_direction.dir_id JOIN movie ON movie_direction.mov_id =
movie.mov_id WHERE mov_title = 'Eyes Wide Shut';

Consulta 4. Consulta SQL para identificar todas las películas con su año de estreno y genero (para
todas las que tengan año de estreno)

SELECT mov_title, mov_year, gen_title


FROM movie
JOIN movie_genres ON movie.mov_id = movie_genres.mov_id
JOIN genres ON movie_genres.gen_id = genres.gen_id;

Consulta 5. Consulta que permita obtener el director de la película en la que se interpreta el


papel de Sean Maguire. Debe devolver el nombre y apellido del director y el título de la película

SELECT dir_fname, dir_lname, mov_title FROM director


JOIN movie_direction ON director.dir_id = movie_direction.dir_id
JOIN movie ON movie_direction.mov_id = movie.mov_id
JOIN movie_cast ON movie.mov_id = movie_cast.mov_id AND movie_cast.role = 'Sean Maguire';

OTRA SOLUCIÓN:

SELECT dir_fname, dir_lname, mov_title FROM director, movie_direction, movie, movie_cast


WHERE director.dir_id = movie_direction.dir_id
AND movie_direction.mov_id = movie.mov_id
AND movie.mov_id = movie_cast.mov_id AND movie_cast.role = 'Sean Maguire';
Consulta 5.b. Consulta que permita obtener el director de la película en la que se interpreta el
papel de Sean Maguire. Debe devolver el nombre del director de la película y el papel
interpretado

SELECT dir_fname, dir_lname, role FROM director


JOIN movie_direction ON director.dir_id = movie_direction.dir_id
JOIN movie_cast ON movie_direction.mov_id = movie_cast.mov_id AND movie_cast.role =
'Sean Maguire'; # Como no se pide información ubicada en la tabla movie no es necesario
contemplarla

OTRA SOLUCIÓN:

SELECT dir_fname, dir_lname, role FROM director, movie_direction, movie_cast


WHERE director.dir_id = movie_direction.dir_id
AND movie_direction.mov_id = movie_cast.mov_id AND movie_cast.role = 'Sean Maguire';

Consulta 6. Consulta que permita listar los actores que tienen un papel registrado en películas
con año de estreno fuera del periodo 1990 a 2000 (ambos incluidos). Se debe obtener nombre
y apellido del actor y título y año de estreno de la película en la que han intervenido.

SELECT act_fname, act_lname, mov_title, mov_year FROM actor


JOIN movie_cast ON actor.act_id = movie_cast.act_id
JOIN movie ON movie_cast.mov_id = movie.mov_id WHERE mov_year NOT BETWEEN 1990 AND
2000;

Consulta 7. Consulta que permita obtener los directores para los que consta información del
género de sus películas. Mostrar la información agrupada por director y género y ordenada por
nombre y apellido de director. Se debe incluir el nombre, apellido del director, el género y el
número de películas (para cada director y género).

SELECT dir_fname, dir_lname, gen_title, COUNT(*) FROM director


JOIN movie_direction ON director.dir_id = movie_direction.dir_id
JOIN movie_genres ON movie_direction.mov_id = movie_genres.mov_id
JOIN genres ON movie_genres.gen_id = genres.gen_id
GROUP BY dir_fname, dir_lname, gen_title
ORDER BY dir_fname, dir_lname ASC;

Consulta 8. Consulta que permita obtener los directores para los que consta información de
género para varias películas. Mostrar la información agrupada por director y ordenada por
nombre y apellido de director. Se debe incluir el nombre, apellido del director y el número de
películas con información de género.

SELECT dir_fname, dir_lname, COUNT(movie_genres.mov_id) FROM director


JOIN movie_direction ON director.dir_id = movie_direction.dir_id
JOIN movie_genres ON movie_direction.mov_id = movie_genres.mov_id
GROUP BY dir_fname, dir_lname
HAVING COUNT(movie_genres.mov_id) > 1
ORDER BY dir_fname, dir_lname ASC;
Consulta 9. Consulta que permita obtener todas las películas con información del año, genero,
nombre y apellido del director. Indicar título e información indicada anteriormente.

SELECT mov_title, mov_year, gen_title, dir_fname, dir_lname


FROM movie
NATURAL JOIN movie_genres
NATURAL JOIN genres
NATURAL JOIN movie_direction
NATURAL JOIN director;

Consulta 10. Consulta que permita obtener todas las películas estrenadas antes de 1989
ordenadas de forma descendente por fecha de estreno. Para todas ellas informar el título, la
fecha de estreno, la duración y el nombre y apellido del director.

SELECT mov_title, mov_year, mov_time,dir_fname, dir_lname


FROM movie
JOIN movie_direction ON movie.mov_id = movie_direction.mov_id
JOIN director ON movie_direction.dir_id=director.dir_id
WHERE mov_year < 1989
ORDER BY mov_year DESC;

Consulta 11. Consulta que permita obtener para cada género el promedio de duración de las
películas y el número de películas del mismo. La consulta debe mostrar el nombre del género y
el promedio de duración y número de películas de cada género.

SELECT gen_title, AVG(mov_time), COUNT(*) AS “#movies”


FROM movie
JOIN movie_genres ON movie.mov_id = movie_genres.mov_id
JOIN genres ON movie_genres.gen_id=genres.gen_id
GROUP BY genres.gen_id;

Consulta 12. Consulta que permita obtener de la película más corta el título, el año, duración de
la película, nombre y apellido del director, nombres y apellidos de los actores y los papeles
interpretados

SELECT mov_title, mov_year, mov_time, dir_fname, dir_lname, act_fname, act_lname, role


FROM movie
JOIN movie_direction USING (mov_id)
JOIN director USING (dir_id)
JOIN movie_cast USING (mov_id)
JOIN actor USING (act_id)
WHERE mov_time=(SELECT MIN(mov_time) FROM movie);
Consulta 13. Consulta que permita obtener los años en los que una película ha obtenido una
calificación de 7 u 8 estrellas en orden ascendente de año

SELECT DISTINCT mov_year


FROM movie NATURAL JOIN rating
WHERE rev_stars IN (7, 8)
ORDER BY mov_year;

Consulta 14. Consulta que permita obtener la máxima valoración de cada película (rev_stars),
para cada película que tenga valoraciones mayores que 0, indicar el título y la máxima valoración
ordenando el listado por el título de la película

SELECT mov_title, MAX(rev_stars)


FROM movie
NATURAL INNER JOIN rating
WHERE rev_stars > 0
GROUP BY mov_id
ORDER BY mov_title;

Consulta 15. Consulta que permita obtener para todas las películas los roles que hay informados
en el sistema (si una película no tiene datos informados en alguna de las tablas debe aparecer
sin los datos que no están informados). Para cada película informar el título, el role, el nombre
y apellido del director de la película y el nombre y apellido del actor que lo interpreta ordenado
por título de película

SELECT mov_title, role, dir_fname, dir_lname, act_fname, act_lname


FROM movie
LEFT JOIN movie_direction USING (mov_id)
LEFT JOIN director USING(dir_id)
LEFT JOIN movie_cast USING (mov_id)
LEFT JOIN actor USING (act_id)
ORDER BY mov_title;

Consulta 16. Consulta que permita obtener todas las película en las que alguno de sus actores
han actuado en más de una película. La consulta debe indicar el nombre de la película, nombre
y apellido del actor y papel desempeñado

SELECT mov_title, act_fname, act_lname, role


FROM movie
JOIN movie_cast ON movie_cast.mov_id=movie.mov_id
JOIN actor ON movie_cast.act_id=actor.act_id
WHERE actor.act_id IN (
SELECT act_id
FROM movie_cast
GROUP BY act_id HAVING COUNT(*)>1);
Consulta 17. Consulta que permita obtener el director que tiene registrado en la base de datos
el máximo número de minutos de película considerando todas sus películas. La consulta debe
mostrar el nombre y apellido del director así como la duración total de sus películas

SELECT dir_fname, dir_lname, SUM(mov_time) duracion_total FROM director


JOIN movie_direction ON director.dir_id = movie_direction.dir_id
JOIN movie ON movie_direction.mov_id = movie.mov_id
GROUP BY director.dir_id
ORDER BY duracion_total DESC
LIMIT 1;

Consulta 18. Considerando los minutos de películas que cada uno de los directores tiene
registrados (como la suma de la duración de todas sus películas), generar la consulta que permita
obtener los directores que tienen una suma de minutos mayor que la media de duración
(minutos de películas) por director. La consulta debe mostrar para cada director el nombre y
apellido del director así como la duración total de sus películas.

SELECT dir_fname, dir_lname, SUM(mov_time) duracion_total FROM director


JOIN movie_direction ON director.dir_id = movie_direction.dir_id
JOIN movie ON movie_direction.mov_id = movie.mov_id
GROUP BY director.dir_id
having duracion_total >
(SELECT AVG(duracion_total) FROM
(SELECT dir_fname, dir_lname, SUM(mov_time) duracion_total FROM director
JOIN movie_direction ON director.dir_id = movie_direction.dir_id
JOIN movie ON movie_direction.mov_id = movie.mov_id
GROUP BY director.dir_id) AS TotalDuracionDir)
ORDER BY duracion_total DESC;

También podría gustarte