79 - Actualización en cascada (update - 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 de las cuales son oriundos los 
clientes.

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',4,'0457858745');

4- Se quiere cambiar el código correspondiente a la provincia "Cordoba" por "10" y modificar todos 
los códigos de provincia de los clientes de "Cordoba" en una sola sentencia:
 update clientes as c
  join provincias as p
  on c.codigoprovincia=p.codigo
  set c.codigoprovincia=10, p.codigo=10
  where p.nombre='Cordoba';

5- Verifique el cambio en ambas tablas:
 select * from clientes;
 select * from provincias;



 

Otros problemas:
Un profesor guarda los promedios de sus alumnos de un curso en una tabla llamada "alumnos" y las 
notas de los mismos en la tabla "notas".

1- Elimine las tablas si existen.

2- Cree las tablas:
 create table alumnos(
  documento char(8) not null,
  nombre varchar(30),
  primary key(documento)
 );

 create table notas(
  documento char(8) not null,
  nota decimal(4,2) unsigned
 );

3- Ingrese los siguientes registros:
 insert into alumnos values('22333444','Juan Perez');
 insert into alumnos values('23555666','Marina Herrero');
 insert into alumnos values('24000333','Daniel Juarez');
 insert into alumnos values('25222111','Hector Paz');

 insert into notas values('22333444',7);
 insert into notas values('23555666',8);
 insert into notas values('24000333',3);
 insert into notas values('25222111',7);
 insert into notas values('22333444',7);
 insert into notas values('23555666',9);
 insert into notas values('24000333',4);
 insert into notas values('22333444',6);
 insert into notas values('23555666',10);
 insert into notas values('24000333',3);
 insert into notas values('25222111',9);
 insert into notas values('23555666',10);

4- El alumno "Juan Perez" registrado con documento "22333444" dice que su documento ha sido 
almacenado erróneamente, en realidad es "22333445". Modifique el documento del alumno en "alumnos" 
y "notas en una sola sentencia:
 update alumnos as a
  join notas as n
  on a.documento=n.documento
  set a.documento='22333445', n.documento='22333445'
  where a.documento='22333444';

Retornar