82 - Borrar registros en cascada (delete - join)


Problema:
Una clínica registra los pacientes en una tabla llamada "pacientes" y en otra tabla 
denominada "obrassociales" almacena los datos de las obras sociales que atiende.

1- Elimine las tablas si existen.

2- Cree las tablas: 
create table pacientes(
  documento char(8),
  nombre varchar(30),
  domicilio varchar(30),
  codigoobrasocial tinyint unsigned
 );

 create table obrassociales(
  codigo tinyint unsigned auto_increment,
  nombre varchar(15),
  domicilio varchar(30),
  primary key(codigo)
 );

3- Ingrese algunos registros:
 insert into obrassociales values (1,'PAMI','Colon 345');
 insert into obrassociales values (2,'IPAM','Sucre 98');
 insert into obrassociales values (3,'OSDOP','Avellaneda 267');

 insert into pacientes values('22333444','Juan Lopez','Guemes 235',1);
 insert into pacientes values('23444555','Analia Juarez','Avellaneda 367',1);
 insert into pacientes values('24555666','Juan Lopez','Guemes 235',2);
 insert into pacientes values('25666777','Jose Ferrero','Urquiza 312',3);
 insert into pacientes values('26777888','Hhector Garcia','Caseros 411',3);
 insert into pacientes values('27888999','Susana Duarte','Peru 211',3);

4- La clínica ya no atiende a pacientes de la obra social "PAMI". Se quiere eliminar de la 
tabla "obrassociales" a dicha obra social y de la tabla "pacientes" a todos los pacientes que 
de "PAMI":
 delete pacientes,obrassociales
  from pacientes as p
  join obrassociales as os
  on p.codigoobrasocial=os.codigo
  where os.nombre='PAMI';

5- Verifique las eliminaciones.



 

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

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');
 insert into inscriptos values(102,2,'2006');
 insert into inscriptos values(104,2,'2006');
 insert into inscriptos values(104,3,'2006');
 insert into inscriptos values(106,1,'2006');
 insert into inscriptos values(109,2,'2006');

4- El club ha cancelado el deporte "tenis"; se quiere eliminar dicho deporte de la tabla "deportes" 
y las inscripciones a "tenis" de "inscriptos":
 delete deportes,inscriptos
  from deportes as d
  join inscriptos as i
  on d.codigo=i.deporte 
  where d.nombre='tenis';

5- Verifique las eliminaciones.

6- El profesor "Carlos García" renunció al club. Se quiere borrar a dicho profesor de la 
tabla "profesores" y eliminar todos los deportes que dictaba "Carlos García", además, de todas las 
inscripciones a todos los deportes que dictaba dicho profesor:
 delete inscriptos,profesores,deportes
  from inscriptos as i
  join deportes as d
  on d.codigo=i.deporte
  join profesores as p
  on d.profesor=p.codigo
  where p.nombre='Carlos Garcia';

7- Verifique las eliminaciones en todas las tablas involucradas.

Retornar