Ejercicios Prácticos de SQL para Gestión de Cine
A continuación, se presentan una serie de ejercicios prácticos para la gestión de una base de datos de cine utilizando SQL. Estos ejercicios abarcan la creación de tablas, inserción de datos, consultas, actualizaciones y borrado de registros.
Creación y Modificación de Tablas
1. Crear la tabla Películas
Para crear la tabla PELICULAS
con los campos Código (entero y clave primaria), Nombre (texto de tamaño 30), CalificaciónEdad (entero) y Fecha_estreno (fecha), se utiliza el siguiente comando:
CREATE TABLE películas (codigo INT PRIMARY KEY, nombre VARCHAR(30), CalificaciónEdad INT, Fecha_estreno DATE);
2. Crear la tabla Salas
Para crear la tabla SALAS
con los campos Código (entero y clave primaria), Nombre (texto de tamaño 20) y Película (entero, clave externa referenciando a PELICULAS
), se utiliza:
CREATE TABLE salas (codigo INT PRIMARY KEY, nombre VARCHAR(20), pelicula INT, FOREIGN KEY (pelicula) REFERENCES peliculas(codigo));
3. Copiar datos de Pelis a Películas
Si los datos para la tabla Películas
ya existen en otra tabla llamada PELIS
, se pueden copiar de la siguiente manera:
INSERT INTO películas SELECT * FROM pelis;
Nota: Este comando también crea la tabla películas
si no existe.
19. Añadir campo Presupuesto a Películas
Para añadir un campo presupuesto
de tipo float a la tabla Peliculas
y actualizar los datos:
ALTER TABLE películas ADD presupuesto FLOAT; UPDATE películas SET presupuesto = 10000000 WHERE nombre = 'Expediente X';
Se pueden añadir otros valores de presupuesto según se requiera.
Consultas Simples
4. Mostrar el nombre de todas las películas
SELECT nombre FROM películas;
5. Mostrar las distintas calificaciones de edad
SELECT DISTINCT CalificaciónEdad FROM PELICULAS;
6. Mostrar películas sin calificar
SELECT * FROM películas WHERE CalificaciónEdad IS NULL;
7. Mostrar salas que no proyectan películas
SELECT * FROM salas WHERE pelicula IS NULL;
Consultas con JOIN
8. Mostrar información de salas y películas (si hay película)
SELECT * FROM salas LEFT JOIN películas ON salas.pelicula = peliculas.codigo;
9. Mostrar información de películas y salas (si hay sala)
SELECT * FROM salas RIGHT JOIN películas ON salas.pelicula = peliculas.codigo;
10. Mostrar películas que no se proyectan en ninguna sala
SELECT nombre FROM películas WHERE codigo NOT IN (SELECT pelicula FROM salas WHERE pelicula IS NOT NULL);
18. Listado de salas que han proyectado ‘Expediente X’
SELECT * FROM salas INNER JOIN peliculas ON salas.pelicula = peliculas.codigo WHERE peliculas.nombre = 'Expediente X';
23. Salas con películas de presupuesto mayor a 500,000 €
SELECT * FROM salas INNER JOIN películas ON salas.pelicula = peliculas.codigo WHERE presupuesto > 500000;
Inserción, Actualización y Borrado de Datos
11. Añadir una nueva película
INSERT INTO películas (nombre, CalificaciónEdad, Fecha_estreno) VALUES ('Un, Dos, Tres', 7, '2001-02-10');
12. Actualizar películas no calificadas
UPDATE películas SET CalificaciónEdad = 13 WHERE CalificaciónEdad IS NULL;
13. Eliminar salas que proyectan películas para todos los públicos
DELETE FROM salas WHERE película IN (SELECT codigo FROM peliculas WHERE CalificaciónEdad = 0);
Consultas con Funciones de Agregación
14. Contar películas por calificación de edad
SELECT COUNT(*), CalificaciónEdad FROM películas GROUP BY CalificaciónEdad;
15. Mostrar películas con la calificación máxima
SELECT * FROM películas WHERE CalificaciónEdad = (SELECT MAX(CalificaciónEdad) FROM películas);
17. Obtener el número de películas de cada CalificaciónEdad
SELECT CalificaciónEdad, COUNT(*) FROM películas GROUP BY CalificaciónEdad;
20. Obtener el presupuesto total de todas las películas
SELECT SUM(presupuesto) FROM películas;
21. Obtener el presupuesto total de películas estrenadas el año pasado
SELECT SUM(presupuesto) FROM películas WHERE Fecha_estreno BETWEEN '2010-01-01' AND '2010-12-31';
Nota: Se asume que el año pasado es 2010 para el ejemplo. Ajustar las fechas según sea necesario.
22. Obtener el número de películas proyectadas en cada sala
SELECT código, COUNT(*) FROM salas GROUP BY codigo;
Consultas con LIKE y Subconsultas
16. Mostrar películas cuyo nombre contiene ‘uno’ o ‘dos’
SELECT * FROM películas WHERE nombre LIKE '%uno%' OR nombre LIKE '%dos%';
24. Películas con presupuesto superior al promedio
SELECT * FROM películas WHERE presupuesto > (SELECT AVG(presupuesto) FROM películas);