77 - Exists y No Exists |
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 la cantidad de cuotas pagas (desde 0 hasta 10 que es el total por todo el año), 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(4), documento char(8), nombre varchar2(30), domicilio varchar2(30), primary key (numero) ); create table inscriptos ( numerosocio number(4) not null, deporte varchar2(20) not null, cuotas number(2) default 0, constraint CK_inscriptos_cuotas check (cuotas>=0 and cuotas<=10), primary key(numerosocio,deporte), constraint FK_inscriptos_socio foreign key (numerosocio) references socios(numero) on delete cascade );
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 inscriptos values(1,'tenis',1); insert into inscriptos values(1,'basquet',2); insert into inscriptos values(1,'natacion',1); insert into inscriptos values(2,'tenis',9); insert into inscriptos values(2,'natacion',1); insert into inscriptos values(2,'basquet',default); insert into inscriptos values(2,'futbol',2); insert into inscriptos values(3,'tenis',8); insert into inscriptos values(3,'basquet',9); insert into inscriptos values(3,'natacion',0); insert into inscriptos values(4,'basquet',10);
4- Emplee una subconsulta con el operador "exists" para devolver la lista de socios que se inscribieron en un determinado deporte.
5- Busque los socios que NO se han inscripto en un deporte determinado empleando "not exists".
6- Muestre todos los datos de los socios que han pagado todas las cuotas.
7- Obtenga el mismo resultado de la consulta anterior pero esta vez emplee una combinación.
Ver solucióndrop table inscriptos; drop table socios; create table socios( numero number(4), documento char(8), nombre varchar2(30), domicilio varchar2(30), primary key (numero) ); create table inscriptos ( numerosocio number(4) not null, deporte varchar2(20) not null, cuotas number(2) default 0, constraint CK_inscriptos_cuotas check (cuotas>=0 and cuotas<=10), primary key(numerosocio,deporte), constraint FK_inscriptos_socio foreign key (numerosocio) references socios(numero) on delete cascade ); 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 inscriptos values(1,'tenis',1); insert into inscriptos values(1,'basquet',2); insert into inscriptos values(1,'natacion',1); insert into inscriptos values(2,'tenis',9); insert into inscriptos values(2,'natacion',1); insert into inscriptos values(2,'basquet',default); insert into inscriptos values(2,'futbol',2); insert into inscriptos values(3,'tenis',8); insert into inscriptos values(3,'basquet',9); insert into inscriptos values(3,'natacion',0); insert into inscriptos values(4,'basquet',10); select nombre from socios s where exists (select *from inscriptos i where s.numero=i.numerosocio and i.deporte='natacion'); select nombre from socios s where not exists (select *from inscriptos i where s.numero=i.numerosocio and i.deporte='natacion'); select s.* from socios s where exists (select *from inscriptos i where s.numero=i.numerosocio and i.cuotas=10); select s.* from socios s join inscriptos i on s.numero=i.numerosocio where i.cuotas=10;