ejercicios resueltos - algebra relacional

13
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 FROM PROVEE WHERE A.ID_ARTICULO = 146 ALGEBRA b. Hallar los clientes que solicitan artículos provistos por el proveedor 15. SQL SELECT PEDIDO.ID_CLIENTE FROM PEDIDO 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 FROM PEDIDO Pe JOIN PROVEEDOR P ON P.ID_PROVEEDOR=Pe.ID_PROVEEDOR WHERE P.CATEGORIA>40 ALGEBRA ( )

Upload: jorge-javier-robas

Post on 08-Nov-2015

574 views

Category:

Documents


23 download

DESCRIPTION

Resolucion de consultas a base de datos con algebra relacional y sentencias sql

TRANSCRIPT

  • 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