81 - Borrar registros buscando coincidencias en otras tablas (delete - join) |
Un club de dicta clases de distintos deportes a sus socios. Guarda la información de los deportes que dicta en una tabla llamada "deportes", los datos de los profesores en "profesores" y las inscipciones en "inscriptos". 1- Elimine las tablas, si existen. 2- Cree las tablas: create table deportes( codigo tinyint unsigned auto_increment, nombre varchar(20) not null, profesor tinyint unsigned, primary key(codigo) ); create table profesores( codigo tinyint unsigned auto_increment, nombre varchar(30), domicilio varchar(30), primary key(codigo) ); create table inscriptos( numerosocio int unsigned, deporte tinyint unsigned, año year not null, cuota char(1), /*'s' o 'n', si esta paga o no*/ primary key(numerosocio,deporte,año) ); 3- Ingrese los siguientes registros: insert into profesores values(1,'Alfredo Perez','Sarmiento 984'); insert into profesores values(2,'Betina Molina','Sucre 356'); insert into profesores values(3,'Carlos Garcia','Urquiza 209'); insert into profesores values(4,'Daniel Morales','Salta 1234'); insert into deportes values(1,'tenis',1); insert into deportes values(2,'natacion',2); insert into deportes values(3,'basquet',3); insert into deportes values(4,'futbol',1); insert into inscriptos values(102,1,'2006','s'); insert into inscriptos values(102,2,'2006','s'); insert into inscriptos values(104,2,'2006','s'); insert into inscriptos values(104,3,'2006','s'); insert into inscriptos values(106,1,'2006','s'); insert into inscriptos values(109,2,'2006','s'); 4- Se quiere eliminar de la tabla "deportes" aquellos deportes para los cuales no hay inscriptos: delete deportes from deportes as d left join inscriptos as i on d.codigo=i.deporte where i.deporte is null; 5- se quiere eliminar de la tabla "profesores" a aquellos profesores que no dictan ningún deporte, es decir, que no están en la tabla "deportes": delete profesores from profesores as p left join deportes as d on d.profesor=p.codigo where d.profesor is null;
A) Un profesor guarda los datos de sus alumnos en una tabla llamada "alumnos" y los alumnos aprobados en la tabla "aprobados". 1- Elimine las tablas si existen: drop table if exists alumnos, aprobados; 2- Cree las tablas: create table alumnos( legajo int(3) unsigned, nombre varchar(30) ); create table aprobados( legajo int(3) unsigned, promedio decimal(4,2) unsigned ); 3- Ingrese los siguientes registros: insert into alumnos values(123,'Juan Perez'); insert into alumnos values(223,'Marta Molina'); insert into alumnos values(343,'Patricia Vargas'); insert into alumnos values(456,'Hector Fuentes'); insert into alumnos values(467,'Alfredo Lopez'); insert into alumnos values(678,'Carla Juarez'); insert into aprobados values(223,9.4); insert into aprobados values(456,6); insert into aprobados values(467,4.5); insert into aprobados values(678,7.8); 4- Se quiere eliminar de la tabla "alumnos" todos aquellos alumnos que no se encuentran en la tabla "aprobados": delete alumnos from alumnos as al left join aprobados as ap on al.legajo=ap.legajo where ap.legajo is null; B) Una pequeña biblioteca de barrio registra los datos de sus socios en la tabla "socios" y en una tabla "morosos" el documento del socio que adeuda libros y la fecha desde la cual es moroso. 1- Elimine las tablas, si existen. 2- Cree las tablas: create table socios( documento char(8), nombre varchar(30), domicilio varchar(30), primary key(documento) ); create table morosos( documento char(8), fecha date ); 3- Ingrese algunos registros: insert into socios values(234,'Juan Lopez','Colon 345'); insert into socios values(345,'Ana Ferrero','Caseros 98'); insert into socios values(456,'Juan Perez','Urquiza 356'); insert into socios values(567,'Karina Torres','Peru 743'); insert into socios values(678,'Juan Lopez','Avellaneda 234'); insert into socios values(789,'Laura Juarez','Sarmiento 765'); insert into morosos values(345,'2006-08-10'); insert into morosos values(567,'2006-09-24'); insert into morosos values(789,'2006-10-06'); 4- Se quiere borrar de la tabla "socios" los socios morosos: delete socios from socios as s join morosos as m on s.documento=m.documento;