74 - Crear tabla a partir de otras (create - insert - join) |
Un club dicta clases de distintos deportes a sus socios. Guarda la información de sus socios en una tabla llamada "socios", los datos de los deportes en "deportes" y las inscipciones en "inscriptos". 1- Elimine las 3 tablas, si existen. 2- Cree las tablas: create table socios( documento char(8) not null, nombre varchar(30) not null, primary key(documento) ); create table deportes( codigo tinyint unsigned auto_increment, nombre varchar(30), primary key(codigo) ); create table inscriptos( documento char(8) not null, codigodeporte tinyint unsigned, año year not null, cuota char(1), /*'s' o 'n', si esta paga o no*/ primary key(documento,codigodeporte,año) ); 3- Ingrese los siguientes registros: insert into socios values('22333444','Juan Perez'); insert into socios values('23333444','Ana Garcia'); insert into socios values('24333444','Hector Fuentes'); insert into socios values('25333444','Marta Molina'); insert into deportes (nombre) values('tenis'); insert into deportes (nombre) values('natacion'); insert into deportes (nombre) values('basquet'); insert into deportes (nombre) values('voley'); insert into inscriptos values('22333444',1,'2005','s'); insert into inscriptos values('22333444',1,'2006','s'); insert into inscriptos values('22333444',2,'2005','s'); insert into inscriptos values('24333444',1,'2005','s'); insert into inscriptos values('24333444',2,'2006','s'); insert into inscriptos values('25333444',1,'2005','s'); insert into inscriptos values('25333444',1,'2006','s'); insert into inscriptos values('25333444',3,'2006','s'); 4- El club desea saber cuántos socios se han inscripto en cada deporte cada año, considerando sólo los deportes que tienen inscripciones: select d.nombre,i.año,count(*) from deportes as d join inscriptos as i on d.codigo=i.codigodeporte join socios as s on i.documento=s.documento group by d.nombre,i.año; 5- El club quiere almacenar esa información en una tabla. Elimine la tabla "inscriptospordeporteporaño" si existe. 6- Cree la tabla utilizando la sentencia del punto 4: create table inscriptospordeporteporaño select d.nombre,i.año,count(*) from deportes as d join inscriptos as i on d.codigo=i.codigodeporte join socios as s on i.documento=s.documento group by d.nombre,i.año; 7- Muestre todos los registros de la nueva tabla. 8- El club desea saber cuántas veces se ha inscripto un socio en algún deporte: select s.nombre,count(i.documento) from socios as s left join inscriptos as i on s.documento=i.documento left join deportes as d on i.codigodeporte=d.codigo group by s.nombre; 9- Elimine la tabla "sociosdeporte" si existe. 10- Guarde la información del punto 8 en una tabla, creándola a partir de esa consulta: create table sociosdeporte select s.nombre,count(i.documento) as inscripciones from socios as s left join inscriptos as i on s.documento=i.documento left join deportes as d on i.codigodeporte=d.codigo group by s.nombre;
A) Una academia de enseñanza dicta distintos cursos de informática. Los cursos se dictan por la mañana (de 8 a 12 hs.) o por la tarde (de 16 a 20 hs.), distintos días a la semana. La academia guarda los datos de los cursos en una tabla llamada "cursos" en la cual almacena el código del curso, el tema, los días de la semana que se dicta, el horario, por la mañana (AM) o por la tarde (PM), la cantidad de clases que incluye cada curso (clases), la fecha de inicio y el costo del curso. Otra tabla llamada "inscriptos" almacena las inscripciones a los distintos cursos. 1- Elimine las tablas si existen. 2- Cree las tablas: create table cursos( codigo tinyint unsigned auto_increment, tema varchar(20) not null, dias set ('lunes','martes','miercoles','jueves','viernes','sabado') not null, horario enum ('AM','PM') not null, clases tinyint unsigned, fechainicio date, costo decimal(5,2) unsigned, primary key(codigo) ); create table inscripciones( documento char(8) not null, codigocurso tinyint unsigned not null, pago char(1), /*'s' si pagó 'n' si no pagó*/ primary key(documento,codigocurso) ); 3- Ingrese los siguientes registros: insert into cursos (tema, dias,horario,clases,fechainicio,costo) values('PHP básico','lunes,martes,miercoles','AM',18,'2006-08-07',200); insert into cursos (tema, dias,horario,clases,fechainicio,costo) values('PHP básico','lunes,martes,miercoles','PM',18,'2006-08-14',200); insert into cursos (tema, dias,horario,clases,fechainicio,costo) values('PHP básico','sabado','AM',18,'2006-08-05',280); insert into cursos (tema, dias,horario,clases,fechainicio,costo) values('PHP avanzado','martes,jueves','AM',20,'2006-08-01',350); insert into cursos (tema, dias,horario,clases,fechainicio,costo) values('JavaScript','lunes,martes,miercoles','PM',15,'2006-09-11',150); insert into cursos (tema, dias,horario,clases,fechainicio,costo) values('Paginas web','martes,jueves','PM',10,'2006-08-08',250); insert into cursos (tema, dias,horario,clases,fechainicio,costo) values('Paginas web','sabado','AM',10,'2006-08-12',280); insert into cursos (tema, dias,horario,clases,fechainicio,costo) values('Paginas web','lunes,viernes','AM',10,'2006-08-21',200); insert into cursos (tema, dias,horario,clases,fechainicio,costo) values('Paginas web','lunes,martes,miercoles,jueves,viernes','AM',10,'2006-09-18',180); insert into cursos (tema, dias,horario,clases,fechainicio,costo) values('Paginas web','lunes,viernes','PM',10,'2006-09-25',280); insert into cursos (tema, dias,horario,clases,fechainicio,costo) values('JavaScript','lunes,martes,viernes,sabado','PM',12,'2006-09-18',150); insert into inscripciones values ('22333333',1,'s'); insert into inscripciones values ('22333333',5,'s'); insert into inscripciones values ('22333333',6,'n'); insert into inscripciones values ('23333444',4,'s'); insert into inscripciones values ('23333444',5,'s'); insert into inscripciones values ('23333444',7,'s'); insert into inscripciones values ('24333555',11,'s'); insert into inscripciones values ('25333666',3,'n'); insert into inscripciones values ('25333666',7,'n'); insert into inscripciones values ('26333777',1,'s'); insert into inscripciones values ('26333777',11,'s'); insert into inscripciones values ('26333777',10,'s'); 4- Muestre la cantidad de inscriptos por tema: select c.tema,count(i.documento) from cursos as c left join inscripciones as i on c.codigo=i.codigocurso group by c.tema; 5- Elimine la tabla "temas" si existe. 6- Guarde la información obtenida en el punto 5 en una tabla llamada "temas" creando la tabla a partir de aquella consulta: create table temas select c.tema,count(i.documento) from cursos as c left join inscripciones as i on c.codigo=i.codigocurso group by c.tema; 7- Vea todos los registros de la tabla creada anteriormente. 8- Visualice la estructura de la tabla "temas". 9- Realice un "join" entre las tablas "cursos" e "inscripciones" mostrando el tema, la cantidad de inscriptos y el monto recaudado (por tema del curso): select c.tema,c.costo,count(i.codigocurso)as cantidad, count(i.codigocurso)*c.costo as total from cursos as c join inscripciones as i on c.codigo=i.codigocurso where i.pago='s' group by c.tema; 10- Elimine la tabla "recaudacion" si existe. 11- Cree la tabla "recaudacion" con el resultado de la consulta del punto 9: create table recaudacion select c.tema,c.costo,count(i.codigocurso)as cantidad, count(i.codigocurso)*c.costo as total from cursos as c join inscripciones as i on c.codigo=i.codigocurso where i.pago='s' group by c.tema; 12- Vea todos los registros de la tabla "recaudacion". B) Una pequeña biblioteca de barrio registra los préstamos de sus libros en una tabla llamada "prestamos" y los datos de sus libros en una tabla llamada "libros". 1- Elimine las tablas, si existen. 2- Cree las tablas: create table libros( codigo int unsigned auto_increment, titulo varchar(40), autor varchar (30), editorial varchar (15), primary key (codigo) ); create table prestamos( codigolibro int unsigned not null, documento char(8) not null, fechaprestamo date not null, fechadevolucion date, primary key(codigolibro,fechaprestamo) ); 3- Ingrese algunos registros para ambas tablas: insert into libros values (15,'Manual de 1º grado','Moreno Luis','Emece'); insert into libros values (28,'Manual de 2º grado','Moreno Luis','Emece'); insert into libros values (30,'Alicia en el pais de las maravillas','Lewis Carroll','Planeta'); insert into libros values (35,'El aleph','Borges','Emece'); insert into libros values (45,'Aprenda PHP','Mario Molina','Planeta'); insert into prestamos values(15,'22333444','2006-07-10','2006-07-12'); insert into prestamos values(15,'22333444','2006-07-20','2006-07-21'); insert into prestamos (codigolibro,documento,fechaprestamo) values(15,'23333444','2006-07-25'); insert into prestamos (codigolibro,documento,fechaprestamo) values(30,'23333444','2006-07-28'); insert into prestamos (codigolibro,documento,fechaprestamo) values(28,'25333444','2006-08-10'); insert into prestamos values(45,'28333444','2006-08-10','2006-08-12'); insert into prestamos (codigolibro,documento,fechaprestamo) values(45,'25333444','2006-09-10'); 4- Muestre los títulos de los libros prestados y no devueltos y en otra columna, si hace más de un mes que fue prestado o menos: select l.titulo, if (adddate(p.fechaprestamo,30)<current_date(),'si','no') as 'Mas de 1 mes' from libros as l join prestamos as p on l.codigo=p.codigolibro where p.fechadevolucion is null; 5- Elimine la tabla "prestados" si existe. 6- Guarde la información del punto 4 en la tabla "prestados" al momento de crearla: create table prestados select l.titulo, if (adddate(p.fechaprestamo,30)<current_date(),'si','no') as 'Mas de 1 mes' from libros as l join prestamos as p on l.codigo=p.codigolibro where p.fechadevolucion is null;