77 - Insertar registros con valores de otra tabla (insert - select - join) |
Un club de dicta clases de distintos deportes a sus socios. Guarda la información de sus socios en una tabla llamada "socios", la de los deportes que dicta en "deportes" y las inscripciones en "inscriptos". 1- Elimine las 3 tablas, si existen. 2- Cree las tablas: create table socios( documento char(8), nombre varchar(30), domicilio varchar(30), primary key(documento) ); create table deportes( codigo tinyint unsigned auto_increment, nombre varchar(15), profesor varchar(30), primary key (codigo) ); create table inscriptos( documento char(8) not null, codigodeporte varchar(20) not null, 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 para las tablas "socios", "deportes" e "inscriptos": insert into socios values('22333444','Juan Perez','Colon 123'); insert into socios values('23333444','Ana Lopez','Caseros 984'); insert into socios values('24333444','Marcelo Morales','Sucre 356'); insert into socios values('25333444','Susana Juarez','Sarmiento 723'); insert into deportes (nombre,profesor) values('tenis','Tadeo Torres'); insert into deportes (nombre,profesor) values('natacion','Natalia Nores'); insert into deportes (nombre,profesor) values('basquet','Bautista Pereyra'); insert into deportes (nombre,profesor) values('paddle','Bautista Pereyra'); insert into inscriptos values('22333444',1,'2015','s'); insert into inscriptos values('22333444',1,'2016','n'); insert into inscriptos values('22333444',2,'2015','s'); insert into inscriptos values('23333444',1,'2015','s'); insert into inscriptos values('23333444',2,'2016','s'); insert into inscriptos values('23333444',1,'2016','s'); insert into inscriptos values('24333444',1,'2016','s'); insert into inscriptos values('24333444',3,'2016','n'); 4- Se desea saber la cantidad de alumnos inscriptos en cada deporte cada año, sin considerar los deportes para los cuales no hay inscriptos: select d.nombre,i.año,count(i.codigodeporte) as cantidad from deportes as d join inscriptos as i on d.codigo=i.codigodeporte group by d.nombre,i.año; 5- El club quiere almacenar esa información en una tabla llamada "inscriptospordeporteporaño". Elimine la tabla, si existe. 6- Cree la tabla con la siguiente estructura: create table inscriptospordeporteporaño( deporte varchar(15), año year, cantidad tinyint unsigned ); 7- Ingrese registros en la tabla creada anteriormente, a partir de la consulta del punto 4: insert into inscriptospordeporteporaño select d.nombre,i.año,count(i.codigodeporte) from deportes as d join inscriptos as i on d.codigo=i.codigodeporte group by d.nombre,i.año; 8- Muestre el nombre del socio, el nombre del deporte y el año de inscripción de todas las inscripciones con cuota impaga: select s.nombre as socio,d.nombre as deporte,i.año from socios as s join inscriptos as i on s.documento=i.documento join deportes as d on i.codigodeporte=d.codigo where i.cuota='n'; 9- Elimine la tabla "sociosdeudores" si existe. 10- Cree la tabla: create table sociosdeudores( socio varchar(30), deporte varchar(15), año year ); 11- Intente ingresar en la tabla anteriormente creada los registros resultado de la consulta del punto 8, colocando los campos "socio" y "deporte" en la lista de campos a cargar: insert into sociosdeudores (socio,deporte) select s.nombre,d.nombre,i.año from socios as s join inscriptos as i on s.documento=i.documento join deportes as d on i.codigodeporte=d.codigo where i.cuota='n'; La sentencia no se ejecuta porque los campos listados son 2 y la consulta retorna 3 columnas. 12- Ingrese en la tabla anteriormente creada los registros resultado de la consulta del punto 8, correctamente: insert into sociosdeudores select s.nombre,d.nombre,i.año from socios as s join inscriptos as i on s.documento=i.documento join deportes as d on i.codigodeporte=d.codigo where i.cuota='n'; 13- Vea los registros de "sociosdeudores". 14- Agrupe por nombre del profesor y deporte y cuente la cantidad de alumnos por profesor y deporte, considerando los deportes para los que no haya inscriptos: select d.profesor,d.nombre,count(i.codigodeporte) as alumnos from deportes as d left join inscriptos as i on i.codigodeporte=d.codigo group by d.profesor,d.nombre; 15- Elimine la tabla "alumnosporprofesor" si existe. 16- Cree la tabla "alumnosporprofesor": create table alumnosporprofesor( profesor varchar(30), deporte varchar(15), cantidad tinyint unsigned ); 17- Ingrese en la tabla creada en el punto anterior con el resultado de la consulta del punto 14: insert into alumnosporprofesor select d.profesor,d.nombre,count(i.codigodeporte) from deportes as d left join inscriptos as i on i.codigodeporte=d.codigo group by d.profesor,d.nombre; 18- Muestre todos los registros de la nueva tabla.
A) Un profesor guarda en una tabla llamada "alumnos" los datos personales de sus alumnos y en otra tabla llamada "notas" las calificaciones de los mismos. 1- Elimine las tablas si existen. 2- Cree las tablas con las siguientes estructuras: create table alumnos( documento char(8), nombre varchar(30), domicilio varchar(30) ); create table notas( documento char(8) not null, nota decimal(4,2) unsigned ); Algunos alumnos tienen más notas que otros porque presentaron trabajos especiales. 3- Ingrese los siguientes registros: insert into alumnos (documento,nombre) values('22333444','Juan Perez'); insert into alumnos (documento,nombre) values('23333444','Marta Molina'); insert into alumnos (documento,nombre) values('24333444','Carlos Fuentes'); insert into alumnos (documento,nombre) values('25333444','Sandra Lopez'); insert into notas values('22333444',8); insert into notas values('23333444',3); insert into notas values('24333444',6); insert into notas values('25333444',9); insert into notas values('23333444',2); insert into notas values('24333444',5); insert into notas values('25333444',8); insert into notas values('25333444',10); 4- El profesor necesita conocer el documento, el nombre del alumno y el promedio de sus notas: select a.documento,nombre,avg(n.nota) as promedio from alumnos as a join notas as n on a.documento = n.documento group by a.documento; 5- Elimine la tabla "promedios" si existe. 6- Cree la tabla "promedios" con la siguiente estructura: create table promedios( documento char(8), nombre varchar(30), promedio decimal(4,2) unsigned ); 7- Ingrese los registros resultado de la consulta del punto 4 en la tabla "promedios": insert into promedios select a.documento,nombre,avg(n.nota) from alumnos as a join notas as n on a.documento = n.documento group by a.documento; 8- Muestre el documento, nombre y promedio de los alumnos aprobados: select a.documento,nombre,avg(n.nota) as promedio from alumnos as a join notas as n on a.documento = n.documento group by a.documento having promedio>=4; 9- Elimine la tabla "aprobados" si existe. 10- Cree la tabla "aprobados" con esta estructura: create table aprobados( documento char(8), nombre varchar(30), promedio decimal(4,2) unsigned ); 11- Ingrese los registros resultado de la consulta del punto 8 en la tabla creada en el punto anterior: insert into aprobados select a.documento,nombre,avg(n.nota) as promedio from alumnos as a join notas as n on a.documento = n.documento group by a.documento having promedio>=4; 12- Muestre los registros de "aprobados". B) Un banco tiene registrados los datos de sus clientes en una tabla denominada "clientes" y las cuentas corrientes de los mismos en una tabla llamada "cuentas". 1- Elimine las tablas, si existen. 2- Cree las tablas: create table clientes( documento char(8), nombre varchar(30), domicilio varchar(30), primary key(documento) ); create table cuentas( numero int(8) zerofill auto_increment, documento char(8) not null, saldo decimal(9,2), primary key(numero) ); 3- Ingrese los siguientes registros: insert into clientes (documento,nombre) values ('22333444','Juan Perez'); insert into clientes (documento,nombre) values ('23333444','Maria Pereyra'); insert into clientes (documento,nombre) values ('24333444','Marcos Torres'); insert into clientes (documento,nombre) values ('25333444','Ana Juarez'); insert into cuentas values(1234,'22333444',2000.60); insert into cuentas values(2566,'23333444',5050); insert into cuentas values(5987,'24333444',200); insert into cuentas values(14434,'25333444',8000.60); insert into cuentas values(28566,'23333444',8050); insert into cuentas values(35987,'24333444',2000); insert into cuentas values(35997,'24333444',2000); 4- Agrupe por documento y muestre el documento del cliente, su nombre, en una columna llamada "cantidad" calcule la cantidad de cuentas de cada cliente y en otra columna llamada "total" calcule la suma de todas las cuentas de cada cliente: select cl.documento,nombre, count(*) as cantidad, sum(saldo) as total from cuentas as cu join clientes as cl on cl.documento=cu.documento group by cl.documento; 5- Elimine la tabla "cuentasporcliente", si existe. 6- Cree la tabla "cuentasporcliente" con la siguiente estructura: create table cuentasporcliente( numero int unsigned auto_increment, documento char(8), nombre varchar(30), cantidad tinyint unsigned, total decimal(9,2) unsigned, primary key(numero) ); 7- Inserte el resultado de la consulta del punto 4 en la tabla creada anteriormente: insert into cuentasporcliente (documento,nombre,cantidad,total) select cl.documento,nombre, count(*) as cantidad, sum(saldo) from cuentas as cu join clientes as cl on cl.documento=cu.documento group by cl.documento; 8- Vea los registros de "cuentasporcliente".