79 - Subconsulta con update y delete |
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óndrop 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');
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
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');