You are on page 1of 13

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.LOCALIDAD<>BAHA 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