79 - Subconsulta con update y delete


Primer problema:

Un supermercado almacena los datos de sus empleados en una tabla denominada "empleados" y en una tabla llamada "sucursales" los códigos y ciudades de las diferentes sucursales.

1- Elimine las tablas "empleados" y "sucursales":

 drop table empleados;
 drop table sucursales;

2- Cree la tabla "sucursales":

 create table sucursales( 
  codigo number(2),
  ciudad varchar2(30) not null,
  provincia varchar2(30),
  primary key(codigo)
 ); 

3- Cree la tabla "empleados":

 create table empleados( 
  documento char(8) not null,
  nombre varchar2(30) not null,
  codigosucursal number(2),
  sueldo number(6,2),
  primary key(documento),
  constraint FK_empleados_sucursal
   foreign key (codigosucursal)
   references sucursales(codigo)
 ); 

4- Ingrese algunos registros para ambas tablas:

 insert into sucursales values(1,'Cordoba','Cordoba');
 insert into sucursales values(2,'Tucuman','Tucuman');
 insert into sucursales values(3,'Carlos Paz','Cordoba');
 insert into sucursales values(4,'Cruz del Eje','Cordoba');
 insert into sucursales values(5,'La Plata','Buenos Aires');

 insert into empleados values('22222222','Ana Acosta',1,500);
 insert into empleados values('23333333','Carlos Caseros',1,610);
 insert into empleados values('24444444','Diana Dominguez',2,600);
 insert into empleados values('25555555','Fabiola Fuentes',5,700);
 insert into empleados values('26666666','Gabriela Gonzalez',3,800);
 insert into empleados values('27777777','Juan Juarez',4,850);
 insert into empleados values('28888888','Luis Lopez',4,500);
 insert into empleados values('29999999','Maria Morales',5,800);

5- Realice un join para mostrar el documento, nombre, sueldo, ciudad y provincia de todos los empleados

6- El supermercado necesita incrementar en un 10% el sueldo de los empleados de la sucursal de "Cruz del Eje". Actualice el campo "sueldo" de la tabla "empleados" de todos los empleados de dicha sucursal empleando subconsulta.

7- El supermercado quiere incrementar en un 20% el sueldo de los empleados de las sucursales de la provincia de Córdoba. Actualice el campo "sueldo" de la tabla "empleados" de todos los empleados de tales sucursales empleando subconsulta.

8- La empleada "Ana Acosta" es trasladada a la sucursal de Carlos Paz. Se necesita actualizar el sueldo y la sucursal de tal empleada empleando subconsultas, debe tener el mismo sueldo que la empleada "Maria Morales".

9- El empleado "Carlos Caseros" se traslada a la sucursal de "La Plata". Se necesita actualizar el sueldo y sucursal de tal empleado con los mismos valores que la empleada "Maria Morales" (emplee subconsulta).

10- El supermercado cerrará todas las sucursales de la provincia de "Cordoba". Elimine los empleados que pertenezcan a sucursales de tal provincia empleando subconsulta.

Ver solución

 drop table empleados;
 drop table sucursales;

 create table sucursales( 
  codigo number(2),
  ciudad varchar2(30) not null,
  provincia varchar2(30),
  primary key(codigo)
 ); 

 create table empleados( 
  documento char(8) not null,
  nombre varchar2(30) not null,
  codigosucursal number(2),
  sueldo number(6,2),
  primary key(documento),
  constraint FK_empleados_sucursal
   foreign key (codigosucursal)
   references sucursales(codigo)
 ); 

 insert into sucursales values(1,'Cordoba','Cordoba');
 insert into sucursales values(2,'Tucuman','Tucuman');
 insert into sucursales values(3,'Carlos Paz','Cordoba');
 insert into sucursales values(4,'Cruz del Eje','Cordoba');
 insert into sucursales values(5,'La Plata','Buenos Aires');

 insert into empleados values('22222222','Ana Acosta',1,500);
 insert into empleados values('23333333','Carlos Caseros',1,610);
 insert into empleados values('24444444','Diana Dominguez',2,600);
 insert into empleados values('25555555','Fabiola Fuentes',5,700);
 insert into empleados values('26666666','Gabriela Gonzalez',3,800);
 insert into empleados values('27777777','Juan Juarez',4,850);
 insert into empleados values('28888888','Luis Lopez',4,500);
 insert into empleados values('29999999','Maria Morales',5,800);

 select documento,nombre,sueldo,ciudad,provincia from empleados e
  join sucursales s
  on e.codigosucursal=s.codigo;

 update empleados set sueldo=sueldo+sueldo*0.1
  where codigosucursal=
  (select codigo from sucursales
   where ciudad='Cruz del Eje');

 update empleados set sueldo=sueldo+sueldo*0.2
  where codigosucursal in
  (select codigo from sucursales
   where provincia='Cordoba');

 update empleados set sueldo=
  (select sueldo from empleados
    where nombre='Maria Morales'),
  codigosucursal=
  (select codigo from sucursales
    where ciudad='Carlos Paz')
  where nombre='Ana Acosta';

 update empleados set (sueldo,codigosucursal)=
  (select sueldo,codigosucursal from empleados
    where nombre='Maria Morales')
  where nombre='Carlos Caseros';

 delete from empleados
  where codigosucursal in
   (select codigo
    from sucursales
    where provincia='Cordoba');

 

Segundo problema:

Un club dicta clases de distintos deportes a sus socios. El club tiene una tabla llamada "inscriptos" en la cual almacena el número de "socio", el código del deporte en el cual se inscribe y si la matricula está o no paga, y una tabla denominada "socios" en la que guarda los datos personales de cada socio.

1- Elimine las tablas:

 drop table inscriptos;
 drop table socios;

2- Cree las tablas:

 create table socios(
  numero number(5),
  documento char(8),
  nombre varchar2(30),
  domicilio varchar2(30),
  primary key (numero)
 );
 
 create table inscriptos (
  numerosocio number(5) not null,
  deporte varchar2(20) not null,
  matricula char(1),-- 'n' o 's'
  primary key(numerosocio,deporte),
  constraint FK_inscriptos_socio
   foreign key (numerosocio)
   references socios(numero)
 );

3- Ingrese algunos registros:

 insert into socios values(1,'23333333','Alberto Paredes','Colon 111');
 insert into socios values(2,'24444444','Carlos Conte','Sarmiento 755');
 insert into socios values(3,'25555555','Fabian Fuentes','Caseros 987');
 insert into socios values(4,'26666666','Hector Lopez','Sucre 344');
 insert into socios values(5,'27777777','Ines Irala','Colon 888');

 insert into inscriptos values(1,'tenis','s');
 insert into inscriptos values(1,'basquet','s');
 insert into inscriptos values(1,'natacion','s');
 insert into inscriptos values(2,'tenis','s');
 insert into inscriptos values(2,'natacion','s');
 insert into inscriptos values(2,'basquet','n');
 insert into inscriptos values(2,'futbol','n');
 insert into inscriptos values(3,'tenis','s');
 insert into inscriptos values(3,'basquet','s');
 insert into inscriptos values(3,'natacion','n');
 insert into inscriptos values(4,'basquet','n');

4- Realice una combinación mostrando todos los datos de "socios", el deporte y la matrícula de todos los socios (se encuentren o no en "inscriptos")

5- Actualizamos la cuota ('s') de todas las inscripciones de un socio determinado (por documento) empleando subconsulta (3 registros)

6- Elimine todas las inscripciones de los socios que deben alguna matrícula empleando subconsulta


Ver solución
 drop table inscriptos;
 drop table socios;

 create table socios(
  numero number(5),
  documento char(8),
  nombre varchar2(30),
  domicilio varchar2(30),
  primary key (numero)
 );
 
 create table inscriptos (
  numerosocio number(5) not null,
  deporte varchar2(20) not null,
  matricula char(1),-- 'n' o 's'
  primary key(numerosocio,deporte),
  constraint FK_inscriptos_socio
   foreign key (numerosocio)
   references socios(numero)
 );

 insert into socios values(1,'23333333','Alberto Paredes','Colon 111');
 insert into socios values(2,'24444444','Carlos Conte','Sarmiento 755');
 insert into socios values(3,'25555555','Fabian Fuentes','Caseros 987');
 insert into socios values(4,'26666666','Hector Lopez','Sucre 344');
 insert into socios values(5,'27777777','Ines Irala','Colon 888');

 insert into inscriptos values(1,'tenis','s');
 insert into inscriptos values(1,'basquet','s');
 insert into inscriptos values(1,'natacion','s');
 insert into inscriptos values(2,'tenis','s');
 insert into inscriptos values(2,'natacion','s');
 insert into inscriptos values(2,'basquet','n');
 insert into inscriptos values(2,'futbol','n');
 insert into inscriptos values(3,'tenis','s');
 insert into inscriptos values(3,'basquet','s');
 insert into inscriptos values(3,'natacion','n');
 insert into inscriptos values(4,'basquet','n');

 select numero,documento,nombre,domicilio,deporte,matricula
  from socios s
  full join inscriptos i
  on numerosocio=numero;

 update inscriptos set matricula='s'
  where numerosocio=
   (select numero
     from socios
     where documento='25555555');

 delete from inscriptos
  where numerosocio in
   (select numero
    from socios s
    join inscriptos
    on numerosocio=numero
    where matricula='n');

Retornar