78 - Actualizar datos con valores de otra tabla (update)


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

4- La empresa quiere eliminar la tabla "provincias" y almacenar el nombre de la provincia de la 
cual son oriundos sus clientes en la misma tabla "clientes".

5- Altere la tabla "clientes" para que se almacene en ella el nombre de la provincia:
 alter table clientes add provincia varchar(20);

6- Actualice el campo "provincia" de todos los registros de "clientes", con el valor del 
campo "nombre" de la tabla "provincias" mediante un "join":
 update clientes as c
  join provincias as p
  on c.codigoprovincia=p.codigo
  set c.provincia=p.nombre;

7- Elimine el campo innecesario en "clientes" y la tabla "provincias".



 

Otros problemas:
A) Un club dicta clases de distintos deportes. En una tabla llamada "socios" guarda los datos de 
sus socios y en una tabla denominada "inscriptos" almacena la información necesaria para las 
inscripciones de los socios a los distintos deportes.

1- Elimine las tablas si existen.

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

 create table inscriptos(
  documento char(8) not null, 
  deporte varchar(15) not null,
  año year,
  matricula char(1), /*si esta paga ='s' sino 'n'*/
  primary key(documento,deporte,año)
 );

3- Ingrese algunos registros para ambas tablas:
 insert into socios values('22333444','Juan Perez','Colon 234');
 insert into socios values('23333444','Maria Lopez','Sarmiento 465');
 insert into socios values('24333444','Antonio Juarez','Caseros 980');

 insert into inscriptos values ('22333444','natacion','2015','s');
 insert into inscriptos values ('22333444','natacion','2016','n');
 insert into inscriptos values ('23333444','natacion','2015','s');
 insert into inscriptos values ('23333444','tenis','2016','s');
 insert into inscriptos values ('23333444','natacion','2016','s');
 insert into inscriptos values ('24333444','tenis','2016','n');
 insert into inscriptos values ('24333444','basquet','2016','n');

4- El club quiere eliminar la tabla "socios" porque en adelante, para inscribirse en un deporte ya 
no será necesario ser socio. Se quiere almacenar el nombre y domicilio de quien se inscribe en la 
misma tabla en la cual se registran las inscripciones. Agregue los campos necesarios a la 
tabla "inscriptos":
 alter table inscriptos add nombre varchar(30), add domicilio varchar(30);

5- Actualice los nuevos campos realizando un "join" con la tabla "socios":
  update socios as s
  join inscriptos as i
  on s.documento=i.documento
  set i.nombre=s.nombre,
  i.domicilio=s.domicilio;

6- Elimine la tabla "socios".


B) Una empresa registra los datos personales de sus empleados en una tabla llamada "empleados" y 
las dependencias a las cuales pertenecen los mismos en una tabla denominada "dependencias".

1- Elimine las tablas "empleados" y "dependencias" si existen.

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

 create table dependencias(
  documento char(8) not null,
  seccion varchar(30),
  sueldo decimal (6,2) unsigned,
  primary key(documento)
 );

3- Ingrese algunos registros:
 insert into empleados values ('22333111','Juan Perez','Colon 123','1990-02-01');
 insert into empleados values ('25444444','Susana Morales','Avellaneda 345','1995-04-01');
 insert into empleados values ('20111222','Hector Pereyra','Caseros 987','1995-04-01');
 insert into empleados values ('30000222','Luis Luque','Urquiza 456','1980-09-01');
 insert into empleados values ('20555444','Laura Torres','San Martin 1122','2000-05-15');
 insert into empleados values ('30000234','Alberto Soto','Peru 232','2003-08-15');
 insert into empleados values ('30154269','Oscar Mendez','Colon 1245','2004-06-23');

 insert into dependencias values('22333111','Gerencia',2000);
 insert into dependencias values ('25444444','Sistemas',1500);
 insert into dependencias values ('20111222','Sistemas',1400);
 insert into dependencias values ('30000222','Contaduría',1400);
 insert into dependencias values ('20555444','Secretaría',1000);
 insert into dependencias values ('30000234','Secretaría',1000);
 insert into dependencias values ('30154269','Relaciones públicas',1100);

4- La empresa quiere eliminar la tabla "dependencias" y guardar la información que la misma 
contiene en la tabla "empleados". Agregue los campos necesarios a la tabla "empleados":
 alter table empleados add seccion varchar(30) not null, add sueldo decimal(6,2) unsigned;

5- Vea los registros de la tabla "empleados":
 select *from empleados;

6- Actualice los nuevos campos realizando un "join" con la tabla "dependencias":
 update empleados as e
  join dependencias as d
  on d.documento=e.documento
  set e.seccion=d.seccion,
  e.sueldo=d.sueldo;

7- Elimine la tabla "dependencias".

8- Visualice la nueva estructura de la tabla "empleados" y sus registros.


C) Un instituto de enseñanza guarda en una tabla llamada "alumnos" los datos personales de sus 
alumnos.

1- Elimine la tabla "alumnos" si existe.

2- Cree la tabla con la siguiente estructura:
 create table alumnos(
  apellido varchar(20) not null,
  nombre varchar(20),
  documento char(8),
  domicilio varchar(30),
  primary key(documento)
 );

3- Ingrese los siguientes registros:
  insert into alumnos values('Perez','Luis','22333444','Colon 123');
  insert into alumnos values('Lopez','Natalia','23333444','Caseros 980');
  insert into alumnos values('Torres','Mariano','24333444','Bulnes 256');
  insert into alumnos values('Garcia','Ana','25333444','Sucre 209');
  insert into alumnos values('Perez','Antonio','26333444','Avellaneda 1083');

4- Se desea alterar la tabla "alumnos" para que guarde en un mismo campo el apellido y el nombre 
del alumno.
 update alumnos
  set nombre=concat(apellido,' ',nombre);

5- Muestre todos los registros de la tabla "alumnos".

6- Elimine el campo "apellido".

Retornar