81 - Borrar registros buscando coincidencias en otras tablas (delete - join)


Problema:
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;



 

Otros problemas:
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;

Retornar