PROVEEDOR (id_proveedor, nombre, categoria, ciudad) ARTICULO (id_articulo, descripción, ciudad, precio) CLIENTE (id_cliente, nombre, ciudad) PEDIDO (id_pedido, id_proveedor, id_articulo, id_cliente, cantidad, precio_total) PROVEE (id_proveedor, id_articulo) a. Hallar el código de los proveedores que proveen el artículo 146. SQL SELECT PROVEE.ID_PROVEEDOR SELECT PROVEE.ID_PROVEEDOR FROM PROVEE WHERE A.ID_ARTICULO WHERE A.ID_ARTICULO = 146
ALGEBRA
b. Hallar los clientes que solicitan artículos provistos por el proveedor 15. SQL SELECT PEDIDO.ID_CLIENTE SELECT PEDIDO.ID_CLIENTE FROM PEDIDO WHERE PEDIDO.ID_PROVEEDOR=15 WHERE PEDIDO.ID_PROVEEDOR=15 ALGEBRA
c. Hallar los clientes que solicitan algún artículo provisto por proveedores cON categoría mayor que 4. SQL SELECT Pe.ID_CLIENTE SELECT Pe.ID_CLIENTE FROM PEDIDO Pe PEDIDO Pe JOIN PROVEEDOR P PROVEEDOR P ON P.ID_PROVEEDOR=Pe.ID_PROVEEDOR ON P.ID_PROVEEDOR=Pe.ID_PROVEEDOR WHERE P.CATEGORIA>40 WHERE P.CATEGORIA>40 ALGEBRA
d. Hallar los pedidos realizados por clientes de la ciudad de Rosario. SQL SELECT Pe.ID_PEDIDO FROM PEDIDO Pe JOIN CLIENTE C ON C.ID_CLIENTE=Pe.ID_CLIENTE WHERE C.CIUDAD=”ROSARIO” ALGEBRA
e. Hallar los pedidos en los que un cliente de Rosario solicita artículos producidos en la ciudad de Mendoza. SQL SELECT PE.ID_PEDIDO FROM CLIENTE C JOIN PEDIDO PE ON C.ID_CLIENTE=PE.ID_CLIENTE JOIN ARTICULO AR ON AR.ID_ARTICULO=PE.ID_ARTICULO WHERE C.CIUDAD=”ROSARIO” AND AR.CIUDAD=”MENDOZA” ALGEBRA
( )
f . Hallar los pedidos en los que el cliente 23 solicita artículos no pedidos por el cliente 30. SQL SELECT PEDIDO.ID_PEDIDO FROM PEDIDO WHERE PEDIDO.ID_CLIENTE=23 AND ID_ARTICULO NOT IN (SELECT PEDIDO.ID_PEDIDO FROM PEDIDO WHERE PEDIDO.ID_CLIENTE=30) ALGEBRA
) (
g. Hallar los pares de ciudades (ciudad1, ciudad2), tales que un proveedor de la ciudad1 provee artículos pedidos por clientes de la ciudad2. SQL SELECT DISTINCT PR.CIUDAD, C.CIUDAD FROM PROVEEDOR PR JOIN PEDIDO PE ON PR.ID_PROVEEDOR=PE.ID_PROVEEDOR JOIN CLIENE C ON C.ID_CLIENTE=PE.ID_CLIENTE ALGEBRA
( ) ( )
h. Hallar el nombre de los proveedores cuya categoría sea mayor que la de todos los proveedores que proveen el artículo Cuaderno. SQL SELECT P.NOMBRE, P.CATEGORIA FROM PROVEEDOR P WHERE CATEGORIA > ALL (SELECT P.CATEGORIA FROM PROVEEDOR P JOIN PROVEE PR ON P.ID_PROVEEDOR=PR.ID_PROVEEDOR JOIN ARTICULO A ON A.ID_ARTICULO=PR.ID_ARTICULO WHERE A.DESCRIPCION=”CUADERNO”) ALGEBRA
i.
Hallar los proveedores que proveen el artículo más caro que haya sido comprado alguna vez por un cliente de la ciudad de Salta. SQL
SELECT P.ID_PROVEEDOR FROM CLIENTE C JOIN PEDIDO P ON P.ID_CLIENTE=C.ID_CLIENTE JOIN ARTICULO A ON P.ID_ARTICULO=A.ID_ARTICULO WHERE C.CIUDAD=”SALTA” GROUP BY P.ID_PROVEEDOR HAVING A.PRECIO = ANY (SELECT MAX (A.PRECIO) FROM CLIENTE C JOIN PEDIDO P ON P.ID_CLIENTE=C.ID_CLIENTE JOIN ARTICULO A ON P.ID_ARTICULO=A.ID_ARTICULO WHERE C.CIUDAD=”SALTA”)
ALGEBRA
j. Hallar los clientes que han pedido 2 o más artículos distintos. SQL SELECT C.ID_CLIENTE FROM CLIENTE C JOIN PEDIDO P ON P.ID_CLIENTE=C.ID_CLIENTE JOIN ARTICULO A ON A.ID_ARTICULO=P.ID_ARTICULO GROUP BY C.ID_CLIENTE HAVING COUNT (DISTINCT A.ID_ARTICULO)>=2 ALGEBRA
k. Hallar los proveedores que no tienen ningún pedido en los que el cliente es de la ciudad de Corrientes y el artículo es producido en San Juan. SQL SELECT P.ID_PROVEEDOR FROM PROVEEDOR PR WHERE NOT EXISTS (SELECT * FROM PEDIDO P JOIN CLIENTE C ON P.ID_CLIENTE=C.ID_CLIENTE JOIN ARTICULO A ON A.ID_ARTICULO=P.ID_ARTICULO WHERE PR.ID_PROVEEDOR=P.ID_PROVEEDOR C.CIUDAD=”CORRIENTES” AND A.CIUDAD=”SAN JUAN”) ALGEBRA
( )
l. Hallar la cantidad de artículos diferentes que sON provistos por cada uno de los proveedores de la base de datos. SQL SELECT P.ID_PROVEEDOR, COUNT (A.ID_ARTICULO) FROM PROVEE P GROUP BY P.ID_PROVEEDOR ALGEBRA
Ejercicio 2 Sea el siguiente esquema de base de datos relaciONal: EMPLEADO (id_EMPLEADO, nombre, domicilio, localidad, antigüedad) FUNCION (id_funcion, descripción) PLANTA (id_planta, descripción, localidad) TAREA (id_EMPLEADO, id_funciON) /* FunciONes que cada EMPLEADO está en cONdiciONes de realizar */ ORGANIZACIÓN (id_planta, if_funciON) /* FunciONes previstas como necesarias para el funciONamiento de la planta */ TRABAJA (id_trabaja, id_EMPLEADO, id_planta, fecha_desde, fecha_hasta) /* Los EMPLEADOs que trabajan actualmente en cada planta tienen null en fecha_hasta */ DISTANCIA (localidad1, localidad2, distancia) /* Todas las combinaciONes posibles entre localidades distintas */ a. Listar el nombre de los EMPLEADOs que no trabajan en Bahía Blanca. SQL SELECT E.ID_EMPLEDO FROM EMPLEADO E JOIN TRABAJA T ON E.ID_EMPLEADO=T.ID_EMPLEADO JOIN PLATAN P ON P.ID_PLANTA=T.ID_PLANTA WHERE P.LOCALIDAD<>”BAHÍA BLANCA” ALGEBRA
b.
Listar las funciones que sean desempeñadas por un EMPLEADO de Santa Fe y que no sean requeridas en una planta de Paraná. SQL SELECT T.ID_FUNCION FROM EMPLEADO E JOIN TAREA T ON E.ID_EMPLEADO=T.ID_EMPLEADO WHERE E.LOCALIDAD=”SANTA FE” AND T.ID_FUNCIO NOT IN (SELECT O.ID_FUCION FROM PLANTA P JOIN ORGANIZACIÓN O ON O.ID_PLANTA=O.ID_PLANTA WHERE P.LOCALIDAD=”PARANÁ”)
SELECT T.ID_FUNCION FROM EMPLEADO E JOIN TAREA T ON E.ID_EMPLEADO=T.ID_EMPLEADO WHERE E.LOCALIDAD=”SANTA FE” NOT EXIST (SELECT * FROM PLANTA P JOIN ORGANIZACIÓN O ON P.ID_PLANTA=O.ID_PLANTA WHERE T.ID_FUNCION=O.ID_FUNCION AND P.LOCALIDAD=”PARANÁ”) ALGEBRA
( ) ( )
c. Listar los empleados que estén en condiciones de cumplir una función cualquiera en cada una de las plantas. SQL SELECT E.nombre, E.apellido FROM “Organizacion” O, “Tarea” T, “Empleado” E WHERE T.id_funcion = O.id_funcion AND E.id_empleado=T.id_empledo GRUOP BY E.nombre, E.apellido, O.id_plata HAVING COUNT (*) = (SELECT COUNT (id_planta) FROM PLANTA))
ALGEBRA
d. Listar la cantidad de empleados por planta y el porcentaje que representa sobre el total de empleados de la empresa. SQL SELECT P.id_planta, COUNT (E.id_empleado) FROM “Empleado” E, “Trabaja” T, “Planta” P WHERE E.id_empleado = T.id_empleado AND T.id_planta=P.id_planta GROUP BY P.id_planta, E.id_empleado