TALLER N° 03
DISENO DE LA BASE DE DATOS CINEMAS
IDPELICULA,
IOPELICULA | | “peRoy
[Proyecta 9) NUM_SALA
cn
ee nee }
(—OeRPE 4d NUM_ENTRADA
| por |
[_ mum cure
NUM_CUENTE |
Implementacion de la base de datos cinemas haciendo uso de la integridad referencial
CREATE DATABASE CINEMAS;
USE CINEMAS;
CREATE TABLE PELICULAS(
IDPELICULA SMALLINT NOT NULL AUTO_INCREMENT,
TITULO GHAR(50) NOT NULL,
ACTORES MEDIUMTEXT,
PRODUCCION MEDIUMTEXT,
GUION VARCHAR(40),
ANNO SMALLINT,
DURACION SMALLINT NOT NULL,
NACIONALIDAD VARCHAR(25),
GENERO ENUM(INFANTIL’, ‘COMEDIA’, ‘DRAMA’, ‘ACCION, TERROR, 'EROTICA’),
EDAD_RESTRICCION ENUM(APTA\, 'MAYORES 7',
'MAYORES 13’, "MAYORES 18),
‘SINOPSIS LONGTEXT,
CARTELERA BLOB,
PRIMARY KEY (IDPELICULA)
»
ALTER TABLE PELICULAS ADD DIRECCION MEDIUMTEXT;
INSERT INTO PELICULAS(TITULO, ACTORES, PRODUCCION, DIRECCION, GUION,
ANNO, DURACION, NACIONALIDAD, GENERO, EDAD_RESTRICCION, SINOPSIS)
VALUES(12 ANOS DE ESCLAVITUD’, ‘RICHARD HEICH’, ‘UNIVERSAL’,
"CLAUSE DAMNE’, 'HISTORICA’, 2015, 2, EEUU’, ‘DRAMA’, 'MAYORES 13,
"HISTORIA DE LA ESCLAVITUD);
(CREATE TABLE SALAS(
NUM_SALA SMALLINT NOT NULL,
AFORO SMALLINT NOT NULL,
NUM_FILAS SMALLINT NOT NULL,
OBSERVACIONES LONGTEXT,
PRIMARY KEY (NUM_SALA)
%INSERT INTO SALAS(NUM_SALA, AFORO, NUM_FILAS) VALUES (1,180,10);
INSERT INTO SALAS(NUM_SALA, AFORO, NUM_FILAS) VALUES (2,180, 10);
CREATE TABLE CLIENTES (
NUM_CLIENTE SMALLINT NOT NULL AUTO_INCREMENT,
NOMBRE VARCHAR(40) NOT NULL,
DIRECCION VARCHAR(50),
FECHANAC DATE,
TELEF CHAR(®),
EMAIL CHAR(30),
PUNTOS_ACUM SMALLINT NOT NULL DEFAULT 0,
CLAVE CHAR(6) NOT NULL,
PRIMARY KEY(NUM_CLIENTE) );
INSERT INTO CLIENTES(NOMBRE, DIRECCION, FECHANAC, TELEF, EMAIL,
PUNTOS_ACUM, CLAVE) VALUES(JUAN PEREZ’, ‘PRECURSORES 125’, '1980-12-12',
‘IPEREZ@LINEA.COM, 215, 123456");
CREATE TABLE PROYECCIONES(
IDPROY SMALLINT NOT NULL AUTO_INCREMENT,
IDPELICULA SMALLINT NOT NULL,
NUM_SALA SMALLINT NOT NULL,
HORA TIME NOT NULL,
FECHA DATE NOT NULL,
TARIFA_REDUCIDA BOOL,
ESTRENO BOOL,
PRIMARY KEY(IDPROY),
INDEX (IDPELICULA),
FOREIGN KEY (IDPELICULA) REFERENCES PELICULAS(IDPELICULA),
INDEX (NUM_SALA),
FOREIGN KEY (NUM_SALA) REFERENCES SALAS(NUM_SALA) );
INSERT INTO PROYECCIONES(IDPROY, IDPELICULA, NUM_SALA, HORA, FECHA)
VALUES(1, 1,2,'16:30:00", '2018-5-16');
CREATE TABLE ENTRADAS(
NUM_ENTRADA SMALLINT NOT NULL AUTO_INCREMENT,
IDPROY SMALLINT NOT NULL,
FILA SMALLINT NOT NULL,
NUM_ASIENTO SMALLINT NOT NULL,
NUM_CLIENTE SMALLINT NOT NULL,
RECOGIDA BOOL,
PRIMARY KEY(NUM_ENTRADA),
INDEX(IDPROY),
FOREIGN KEY (IDPROY) REFERENCES PROYECCIONES(IDPROY),
INDEX(NUM_CLIENTE),
FOREIGN KEY (NUM_CLIENTE) REFERENCES CLIENTES(NUM_CLIENTE) );
INSERT INTO ENTRADAS(IDPROY, FILA, NUM_ASIENTO, NUM_CLIENTE, RECOGIDA)
VALUES(1,3,125,1,1);
BUSQUEDAS:
1. Mostrar las salas disminuyendo el aforo en un 10%.
SELECT NUM_SALA, AFORO*0.9 FROM SALAS;
2. Mostrar todos los directores de peticulas, sin duplicidad
SELECT DISTINCT DIRECTOR FROM PELICULAS;3. Mostrar las peliculas de una duracién inferior a 120 minutos
‘SELECT TITULO FROM PELICULAS WHERE DURACION < 120;
4, Mostrar las direcciones de correo electronico de todos los clientes que tengan 1000 puntos
acumulados
‘SELECT EMAIL FROM CLIENTES WHERE PUNTOS_ACUM = 1000;
5. Mostrar las entradas para la proyeccién de numero de identificacién 341 y que correspondan a
filas comprendidas entre la 10 y la 14
‘SELECT * FROM ENTRADAS WHERE IDPROY = 341 AND FILA BETWEEN 10 AND 14;
6. Mostrar todas las peliculas de nacionalidad peruana, francesa o italiana
‘SELECT TITULO FROM PELICULAS WHERE NACIONALIDAD
IN(peruana’, francesa’ 'taliana’);
7. Mostrar los titulos y los directores de todas las peliculas en las que participe Magaly Solier
‘SELECT TITULO, DIRECCION FROM PELICULAS WHERE ACTORES LIKE
“%SOLIER%';
8. Generar un listado de clientes en orden decreciente seguin el atributo de puntos acumulados y
en orden creciente segtin el nombre.
SELECT * FROM CLIENTES ORDER BY PUNTOS_ACUM DESC, NOMBRE ASC;
9. Mostrar las fechas en las que se proyecta la pelicula La boca del lobo
‘SELECT FECHA FROM PELICULAS, PROYECCIONES WHERE TITULO ='La boca del
Lobo’ AND PELICULAS.IDPELICULA = PROYECCIONES.IDPELICULA;
10. Mostrar los nombres de los clientes que hayan adquirido alguna entrada para ver la pelicula
La boca del Lobo
SELECT NOMBRE FROM PELICULAS, PROYECCIONES, ENTRADAS, CLIENTES
WHERE TITULO =" La boca del Lobo’ AND
PELICULAS. IDPELICULA=PROYECCIONES.IDPELICULA AND.
PROYECCIONES.IDPROY =ENTRADAS.IDPROY AND ENTRADAS.NUM_CLIENTE
=CLIENTES.NUM_CLIENTE;
11. Calcule la duracién media de todas las peliculas del género comedia.
‘SELECT AVG(DURACION) FROM PELICULAS WHERE GENERO='comedia’;
12. Obtener la capacidad de aforo de la sala mas grande
‘SELECT MAX(AFORO) FROM SALAS;
13. Calcular la suma de los puntos acumulados por los clientes numero 321, 543, 287 y 721
SELECT SUM(PUNTOS_ACUM) FROM CLIENTES WHERE NUM_CLIENTE IN(321,
543, 287, 721);
14, Obtener el numero total de peliculas de nacionalidad peruana
‘SELECT COUNT(*) FROM PELICULAS WHERE NACIONALIDAD = ‘peruat
15. Obtener para cada género de peliculas, la duracién maxima
SELECT MAX(DURACION) FROM PELICULAS GROUP BY GENERO;
16. Contar el ntimero de entradas compradas por cada cliente
‘SELECT NOMBRE, COUNT(NUM_ENTRADA) FROM CLIENTES.ENTRADAS WHERE,
CLIENTES.NUM_CLIENTE = ENTRADAS.NUM_CLIENTE GROUP BY NOMBRE;
17. Obtener el nombre de todos los clientes que hayan adquirido 20 o mas entradas.
‘SELECT NOMBRE, COUNT(NUM_ENTRADA) FROM CLIENTES, ENTRADAS WHERE
CLIENTES.NUM_CLIENTE = ENTRADAS.NUM_CLIENTE GROUP BY NOMBRE
HAVING COUNT(NUM_ENTRADA) >=20;