80 - Borrar registros consultando otras tablas (delete - join)


Problema:
Una empresa tiene registrados sus clientes en una tabla llamada "clientes", también tiene una 
tabla "provincias" donde registra los nombres de las provincias.

1- Elimine la tabla "clientes" y "provincias", si existen:
 drop table if exists clientes, provincias;

2- Créelas con las siguientes estructuras:
 create table clientes (
  codigo int unsigned auto_increment,
  nombre varchar(30) not null,
  domicilio varchar(30),
  ciudad varchar(20),
  codigoprovincia tinyint unsigned,
  telefono varchar(11),
  primary key(codigo)
 );

 create table provincias(
  codigo tinyint unsigned auto_increment,
  nombre varchar(20),
  primary key (codigo)
 );

3- Ingrese algunos registros para ambas tablas:
 insert into provincias (nombre) values('Cordoba');
 insert into provincias (nombre) values('Santa Fe');
 insert into provincias (nombre) values('Corrientes');
 insert into provincias (nombre) values('Misiones');
 insert into provincias (nombre) values('Salta');
 insert into provincias (nombre) values('Buenos Aires');
 insert into provincias (nombre) values('Neuquen');

 insert into clientes (nombre,domicilio,ciudad,codigoprovincia,telefono)
  values ('Lopez Marcos', 'Colon 111', 'Córdoba',1,'null');
 insert into clientes (nombre,domicilio,ciudad,codigoprovincia,telefono)
  values ('Perez Ana', 'San Martin 222', 'Cruz del Eje',1,'4578585');
 insert into clientes (nombre,domicilio,ciudad,codigoprovincia,telefono)
  values ('Garcia Juan', 'Rivadavia 333', 'Villa Maria',1,'4578445');
 insert into clientes (nombre,domicilio,ciudad,codigoprovincia,telefono)
  values ('Perez Luis', 'Sarmiento 444', 'Rosario',2,null);
 insert into clientes (nombre,domicilio,ciudad,codigoprovincia,telefono)
  values ('Pereyra Lucas', 'San Martin 555', 'Cruz del Eje',1,'4253685');
 insert into clientes (nombre,domicilio,ciudad,codigoprovincia,telefono)
  values ('Gomez Ines', 'San Martin 666', 'Santa Fe',2,'0345252525');
 insert into clientes (nombre,domicilio,ciudad,codigoprovincia,telefono)
  values ('Torres Fabiola', 'Alem 777', 'Villa del Rosario',1,'4554455');
 insert into clientes (nombre,domicilio,ciudad,codigoprovincia,telefono)
  values ('Lopez Carlos', 'Irigoyen 888', 'Cruz del Eje',1,null);
 insert into clientes (nombre,domicilio,ciudad,codigoprovincia,telefono)
  values ('Ramos Betina', 'San Martin 999', 'Cordoba',1,'4223366');
 insert into clientes (nombre,domicilio,ciudad,codigoprovincia,telefono)
  values ('Lopez Lucas', 'San Martin 1010', 'Posadas',5,'0457858745');

4- Se quiere borrar de la tabla "clientes" todos los clientes de la provincia "Santa Fe", pero no 
se recuerda el código de la provincia. Elimine dichos clientes consultando el código de provincia 
en "provincias" en la misma sentencia:
 delete clientes
  from clientes
  join provincias
  on clientes.codigoprovincia=provincias.codigo
  where provincias.nombre='Santa Fe';

5- Verifique la eliminación.



 

Otros problemas:
Un instituto de enseñanza guarda en una tabla llamada "carreras" los datos de las carreras que 
dicta, en "materias" las materias de cada carrera y en "inscriptos" las inscripciones.

1- Elimine las 3 tablas, si existen:
 drop table if exists carreras, materias, inscriptos;

2- Cree las tablas con las siguientes estructuras:
 create table carreras(
  codigo tinyint unsigned auto_increment,
  nombre varchar(30),
  primary key(codigo)
 );

 create table materias(
  codigo tinyint unsigned auto_increment,
  codigocarrera tinyint unsigned,
  nombre varchar(30),
  profesor varchar(30),
  primary key(codigo,codigocarrera)
 );

 create table inscriptos(
  documento char(8) not null,
  codigocarrera tinyint unsigned,
  codigomateria tinyint unsigned,
  año year
 );

3- Ingrese algunos registros:
 insert into carreras values(1,'Analista de sistemas');
 insert into carreras values(2,'Diseñador web');

 insert into materias values(1,1,'Programacion I','Alfredo Lopez');
 insert into materias values(2,1,'Sistemas de datos I','Bernardo Garcia');
 insert into materias values(3,1,'Ingles tecnico','Edit Torres');
 insert into materias values(1,2,'Programacion basica','Alfredo Lopez');
 insert into materias values(2,2,'Ingles I','Edit Torres');
 insert into materias values(3,2,'Protocolos','Hector Juarez');

 insert into inscriptos values('22333444',1,3,'2016');
 insert into inscriptos values('23222222',1,2,'2016');
 insert into inscriptos values('25000999',1,2,'2016');
 insert into inscriptos values('25000999',2,1,'2016');
 insert into inscriptos values('25000999',2,2,'2016');

4- La materia "Sistemas de datos I" no se va a dictar por cambios en el programa. Elimine todas las 
inscripciones a dicha materia de la tabla "inscriptos" consultando el código en "materias" 
y "carreras":
 delete inscriptos
  from inscriptos
  join materias as m
  on inscriptos.codigomateria=m.codigo
  join carreras as c
  on inscriptos.codigocarrera=c.codigo and
  c.codigo=m.codigocarrera
  where m.nombre='Sistemas de datos I';

5- Verifique la eliminación en "inscriptos".

6- Elimine la materia de la tabla "materias":
 delete from materias
  where nombre='Sistemas de datos I';

Retornar