Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 6

73 - Subconsultas como expresion

Primer problema:

Un profesor almacena el documento, nombre y la nota final de cada alumno de su


clase en una tabla llamada "alumnos".

1- Elimine la tabla:

drop table alumnos;

2- Créela con los campos necesarios. Agregue una restricción "primary key" para
el campo "documento" y una "check" para validar que el campo "nota" se
encuentre entre los valores 0 y 10:

create table alumnos(


documento char(8),
nombre varchar2(30),
nota number(4,2),
primary key(documento),
constraint CK_alumnos_nota_valores check (nota>=0 and nota <=10)
);

3-Ingrese algunos registros:

insert into alumnos values('30111111','Ana Algarbe',5.1);


insert into alumnos values('30222222','Bernardo Bustamante',3.2);
insert into alumnos values('30333333','Carolina Conte',4.5);
insert into alumnos values('30444444','Diana Dominguez',9.7);
insert into alumnos values('30555555','Fabian Fuentes',8.5);
insert into alumnos values('30666666','Gaston Gonzalez',9.70);

4- Obtenga todos los datos de los alumnos con la nota más alta, empleando
subconsulta

5- Realice la misma consulta anterior pero intente que la consulta interna retorne,
además del máximo valor de nota, el nombre del alumno.
Mensaje de error, porque la lista de selección de una subconsulta que va luego de
un operador de comparación puede incluir sólo un campo o expresión (excepto si
se emplea "exists" o "in").

6- Muestre los alumnos que tienen una nota menor al promedio, su nota, y la
diferencia con el promedio.

7- Cambie la nota del alumno que tiene la menor nota por 4.

8- Elimine los alumnos cuya nota es menor al promedio.


74 - Subconsultas con in

Primer problema:

Una empresa tiene registrados sus clientes en una tabla llamada "clientes",
también tiene una tabla "ciudades" donde registra los nombres de las ciudades.

1- Elimine las tablas "clientes" y "ciudades":

drop table clientes;


drop table ciudades;

2- Cree la tabla "clientes" (codigo, nombre, domicilio, ciudad, codigociudad) y


"ciudades" (codigo, nombre). Agregue una restricción "primary key" para el campo
"codigo" de ambas tablas y una "foreing key" para validar que el campo
"codigociudad" exista en "ciudades" con eliminación en cascada:

create table ciudades(


codigo number(2),
nombre varchar2(20),
primary key (codigo)
);

create table clientes (


codigo number(4),
nombre varchar2(30),
domicilio varchar2(30),
codigociudad number(2) not null,
primary key(codigo),
constraint FK_clientes_ciudad
foreign key (codigociudad)
references ciudades(codigo)
on delete cascade
);

3- Ingrese algunos registros para ambas tablas:

insert into ciudades values(1,'Cordoba');


insert into ciudades values(2,'Cruz del Eje');
insert into ciudades values(3,'Carlos Paz');
insert into ciudades values(4,'La Falda');
insert into ciudades values(5,'Villa Maria');

insert into clientes values (100,'Lopez Marcos','Colon 111',1);


insert into clientes values (101,'Lopez Hector','San Martin 222',1);
insert into clientes values (105,'Perez Ana','San Martin 333',2);
insert into clientes values (106,'Garcia Juan','Rivadavia 444',3);
insert into clientes values (107,'Perez Luis','Sarmiento 555',3);
insert into clientes values (110,'Gomez Ines','San Martin 666',4);
insert into clientes values (111,'Torres Fabiola','Alem 777',5);
insert into clientes values (112,'Garcia Luis','Sucre 888',5);

4- Necesitamos conocer los nombres de las ciudades de aquellos clientes cuyo


domicilio es en calle "San Martin", empleando subconsulta.

5- Obtenga la misma salida anterior pero empleando join.

6- Obtenga los nombre de las ciudades de los clientes cuyo apellido no comienza
con una letra específica (letra "G"), empleando subconsulta.

7- Pruebe la subconsulta del punto 6 separada de la consulta exterior para


verificar que retorna una lista de valores de un solo campo.

75 - Subconsultas any- some- all

Primer 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 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(5),
documento char(8),
nombre varchar2(30),
domicilio varchar2(30),
primary key (numero)
);

create table inscriptos (


numerosocio number(5),
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- Muestre el número de socio, el nombre del socio y el deporte en que está


inscripto con un join de ambas tablas

5- Muestre los socios que se serán compañeros en tenis y también en natación


(empleando subconsulta)

6- Vea si el socio 1 se ha inscripto en algún deporte en el cual se haya inscripto el


socio 2

7- Realice la misma consulta anterior pero empleando "in" en lugar de "=any"

8- Obtenga el mismo resultado anterior pero empleando join

9- Muestre los deportes en los cuales el socio 2 pagó más cuotas que ALGUN
deporte en los que se inscribió el socio 1

select deporte from inscriptos i where numerosocio=2 and cuotas>any (select


cuotas from inscriptos where numerosocio=1);
10- Realice la misma consulta anterior pero empleando "some" en lugar de "any"

11- Muestre los deportes en los cuales el socio 2 pagó más cuotas que TODOS
los deportes en que se inscribió el socio 1

12- Cuando un socio no ha pagado la matrícula de alguno de los deportes en que


se ha inscripto, se lo borra de la inscripción de todos los deportes. Elimine todos
los socios que no pagaron ninguna cuota en algún deporte (cuota=0)

76 - Subconsultas correlacionadas

Primer 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 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 varchar(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- Se necesita un listado de todos los socios que incluya nombre y domicilio, la


cantidad de deportes a los cuales se ha inscripto, empleando subconsulta.

5- Se necesita el nombre de todos los socios, el total de cuotas que debe pagar
(10 por cada deporte) y el total de cuotas pagas, empleando subconsulta.

6- Obtenga la misma salida anterior empleando join.

También podría gustarte