Consultas de Base de Vinos

Universidad Nacional Autónoma De Honduras Carrera de Informática Administrativa Clase: Base de Datos II Lic. Marco McC

Views 97 Downloads 1 File size 131KB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

Universidad Nacional Autónoma De Honduras

Carrera de Informática Administrativa

Clase: Base de Datos II Lic. Marco McCarthy

Sección 16:00 Investigación: Gestores de Base de Datos

Alumno:

Cuenta 20121004440

Nombre del Estudiante Kevin Omar Hernández Salvador

Fecha: 13 de septiembre 2016

Nivel básico – Ejercicios propuestos 1-Buscar la lista de productores (nombre, apellido y región) ordenados por apellido. R= SELECT Apellido, nombre, Region FROM PRODUCTORES ORDER BY apellido;

2-Hallar los productores localizados en la región de Beaujolais R= SELECT * FROM productores WHERE región = 'BEAUJOLAIS'; 3-¿Cuáles son los productores de la región 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 alfabéticamente. 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 número de identificación de los vinos que tienen un grado superior a 12 o que han sido producidos por el productor número 24. R= SELECT num FROM vinos WHERE grados > 12 UNION SELECT nvin FROM cosechas WHERE NPROD = 24;

5-Indicar, en orden alfabético, el nombre y el apellido de los productores del vino número 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 número 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 número, 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 año 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 número 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 número 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 número 19.

Nivel avanzado – Ejercicios propuestos 1-Para el vino número 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 alfabéticamente. 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 (número 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-¿Cuáles 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 número 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= Solución a) Creación 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; Solución 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 (número, nombre y apellido) han producido todos los vinos? 

a. Escribir la respuesta utilizando la función 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 (número, nombre y apellido) producen al menos todos los vinos producidos por el productor 35? a. Escribir la consulta utilizando la función COUNT. b. Escribir la consulta utilizando el cuantificador existencial. R= a. Solución 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. Solución 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 ) );