ejercicios resueltos - algebra relacional
DESCRIPTION
Resolucion de consultas a base de datos con algebra relacional y sentencias sqlTRANSCRIPT
-
PROVEEDOR (id_proveedor, nombre, categoria, ciudad)
ARTICULO (id_articulo, descripcin, 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 cdigo de los proveedores que proveen el artculo 146.
SQL
SELECT PROVEE.ID_PROVEEDOR
FROM PROVEE
WHERE A.ID_ARTICULO = 146
ALGEBRA
b. Hallar los clientes que solicitan artculos provistos por el proveedor 15.
SQL
SELECT PEDIDO.ID_CLIENTE
FROM PEDIDO
WHERE PEDIDO.ID_PROVEEDOR=15
ALGEBRA
c. Hallar los clientes que solicitan algn artculo provisto por proveedores cON categora
mayor que 4.
SQL
SELECT Pe.ID_CLIENTE
FROM PEDIDO Pe
JOIN PROVEEDOR P
ON P.ID_PROVEEDOR=Pe.ID_PROVEEDOR
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 artculos 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 artculos 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 artculos 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 categora sea mayor que la de todos los
proveedores que proveen el artculo 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 artculo ms 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 ms artculos 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 ningn pedido en los que el cliente es de la ciudad de Corrientes y el artculo 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 artculos 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, antigedad) FUNCION (id_funcion, descripcin) PLANTA (id_planta, descripcin, localidad) TAREA (id_EMPLEADO, id_funciON) /* FunciONes que cada EMPLEADO est en cONdiciONes de realizar */ ORGANIZACIN (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 Baha 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.LOCALIDADBAHA BLANCA ALGEBRA
(
)
(
)
( )
-
b. Listar las funciones que sean desempeadas 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 ORGANIZACIN 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 ORGANIZACIN 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 estn en condiciones de cumplir una funcin 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