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ó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');
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');