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)
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 )
El aceite de olivas: Su extracción, clarificación, depuración, conservación y envases para su exportación, decoloración y medios propuestos para quitarle la rancidez