Você está na página 1de 8

Universidad Nacional Autnoma De Honduras

Carrera de Informtica Administrativa

Clase: Base de Datos II


Lic. Marco McCarthy

Seccin 16:00
Investigacin: Gestores de Base de Datos

Alumno:

Cuenta Nombre del Estudiante


20121004440 Kevin Omar Hernndez Salvador

Fecha: 13 de septiembre 2016


Nivel bsico Ejercicios propuestos
1-Buscar la lista de productores (nombre, apellido y regin) ordenados por
apellido.
R= SELECT Apellido, nombre, Region
FROM PRODUCTORES
ORDER BY apellido;

2-Hallar los productores localizados en la regin de Beaujolais


R= SELECT *
FROM productores
WHERE regin = 'BEAUJOLAIS';
3-Cules son los productores de la regin de Beaujolais que han producido
al menos una cosecha en cantidad superior a 300 botellas?, para esto se
requiere el nombre y el apellido de los productores ordenados
alfabticamente.
R= SELECT distinct p.apellido, p.nombre
FROM productores p, cosechas c
WHERE p.region = 'Beaujolais' AND p.num = c.nprod AND c.cantidad > 300
ORDER BY p.apellido,p.nombre;
4-Encontrar el nmero de identificacin de los vinos que tienen un grado
superior a 12 o que han sido producidos por el productor nmero 24.
R= SELECT num
FROM vinos
WHERE grados > 12
UNION
SELECT nvin
FROM cosechas
WHERE NPROD = 24;
5-Indicar, en orden alfabtico, el nombre y el apellido de los productores del
vino nmero 12.
R= SELECT DISTINCT P.apellido, P.nombre
FROM productores p, cosechas c
WHERE p.num = c.nprod AND c.nvin = 12
ORDER BY p.apellido, p.nombre;
6-Indicar el nombre y el apellido de los productores que han producido el
vino nmero 20 en una cantidad total superior a 50.
R= SELECT DISTINCT p.apellido, p.nombre
FROM productores p, cosechas c
WHERE c.nvin = 20 AND p.num = c.nprod AND c.cantidad > 50;
7-Hallar el nmero, nombre y apellido de los productores que no
han producido vinos.
R= SELECT p.num, p.apellido, p.nombre
FROM productores p
WHERE p.num IN ( SELECT num FROM productores MINUS SELECT nprod
FROM cosechas );
8-Hallar el nombre de los vinos del ao 1973 que no tienen cosechas
registradas.
R= SELECT nombre FROM vinos
WHERE ano = 1973
MINUS
SELECT nombre
FROM vinos v, cosechas c
WHERE v.num = c.nvin AND v.ano = 1973
9-Hallar el nmero del vino y su nombre para aquellos vinos producidos por
al menos dos productores de dos regiones diferentes.
R= SELECT DISTINCT v.num, v.nombre
FROM vinos v, productores p1, productores p2, cosechas c1, cosechas c2
WHERE v.num= c1.nvin AND v.num = c2.nvin AND p1.num = c1.nprod
AND p2.num = c2.nprod AND p1.region <>p2.region;
10-Hallar el nmero del vino que se ha producido en mayor cantidad.
R= SELECT nvin
FROM cosechas
MINUS
SELECT c1.nvin
FROM cosechas c1, cosechas c2
WHERE c1.nvin <> c2.nvin AND c1.cantidad < c2.cantidad;
El vino nmero 19.

Nivel avanzado Ejercicios propuestos


1-Para el vino nmero 12, hallar la cantidad total de botellas producidas.
R= SELECT SUM (cantidad)
FROM cosechas
WHERE nvin = 12;
Resultado: 541
2-Obtener la lista de vinos ordenados alfabticamente. Para cada vino se
requiere su nombre y la cantidad total de botellas producidas.
R= SELECT nombre , SUM(cantidad) AS botellas
FROM vinos v, cosechas c
WHERE v.num = c.nvin
GROUP BY nombre;
3-Para cada vino (nmero y nombre) dar la cantidad de productores que lo
producen.
R= SELECT v.num, v.nombre, COUNT(*)
FROM vinos v, cosechas c
WHERE v.num = c.nvin
GROUP BY v.num, v.nombre;
4-Cules productores producen por lo menos tres vinos diferentes?, para
cada productor seleccionado, se solicita su nombre y su apellido.
R= SELECT p.nombre, p.apellido
FROM productores p, cosechas c
WHERE p.num = c.nprod
GROUP BY p.num, p.nombre, p.apellido
HAVING COUNT(DISTINCT c.nvin) >= 3;
5, Para un productor, un vino es significativo si en una misma cosecha se ha
producido una cantidad superior a 200 botellas. Calcular el nmero de vinos
significativos para cada productor. Para aquellos productores que tengan
por lo menos un vino significativo se debe indicar el nombre y el apellido.
a. Concebir la respuesta bajo la forma de dos consultas, en donde la
segunda consulta se apoye en los resultados de la primera (defina la primera
como una vista SQL).
b. Conciba la respuesta utilizando solo una consulta SQL (puede usar
subconsultas).
R= Solucin a) Creacin de la vista:
CREATE VIEW VINOSPRODUCTOR AS
SELECT p.num, p.nombre, p.apellido, c.nvin as vino
FROM productores p, cosechas c
WHERE p.num = c.nprod
GROUP BY p.num , p.nombre, p.apellido, c.nvin
HAVING SUM (c.cantidad) > 200;
Consulta:

SELECT nombre, apellido , count (*)


FROM vinosproductor
GROUP BY num, nombre, apellido;
Solucin b)

SELECT p.nombre, p.apellido, COUNT(DISTINCT c.nvin)


FROM productores p, cosechas c
WHERE p.num = c.nprod AND c.nvin
IN (SELECT c1.nvin
FROM cosechas c1
WHERE c1.nprod = p.num
GROUP BY c1.nvin
HAVING SUM(c1.cantidad) > 200 )
GROUP BY p.num,p.nombre, p.apellido;
6, Qu productores (nmero, nombre y apellido) han producido todos los
vinos?

a. Escribir la respuesta utilizando la funcin COUNT.

b. Escribir la respuesta utilizando el cuantificador EXIST..

R= a. Utilizando COUNT(*)

SELECT p.num, p.nombre, p.apellido

FROM productores p, cosechas c


WHERE p.num = c.nprod

GROUP BY p.num, p.nombre, p.apellido

HAVING COUNT(*) = (SELECT COUNT(*) FROM vinos );

b. Utilizando Exist

SELECT num, nombre , apellido

FROM PRODUCTORES p

WHERE NOT EXISTS

( SELECT * FROM vinos v

WHERE NOT EXISTS

( SELECT * FROM cosechas c WHERE c.nprod = p.num AND c.nvin = v.num )


);

7-Qu productores (nmero, nombre y apellido) producen al menos todos


los vinos producidos por el productor 35?

a. Escribir la consulta utilizando la funcin COUNT.

b. Escribir la consulta utilizando el cuantificador existencial.

R= a. Solucin utilizando COUNT.

SELECT p.num , p.nombre, p.apellido

FROM productores p , cosechas c1, cosechas c2

WHERE c2.nprod = 35 AND c1.nvin = c2.nvin AND c1.NPROD != 35 AND


c1.nprod = p.num

GROUP BY p.num, p.nombre, p.apellido

HAVING COUNT(*) = ( SELECT COUNT(*) FROM cosechas WHERE nprod =


35);

b. Solucin utilizando EXISTS

SELECT p.num, p.nombre, p.apellido


FROM productores p

WHERE p.num != 35

AND NOT EXISTS ( SELECT * FROM cosechas c1

WHERE c1.nprod = 35 AND NOT EXISTS

(SELECT * FROM cosechas c2 WHERE c1.nvin = c2.nvin AND p.num = c2.nprod )


);

Você também pode gostar