100% encontró este documento útil (1 voto)
282 vistas12 páginas

Ej Algebra Relacional

Descargar como pdf o txt
Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1/ 12

EJERCICIO 1

Sea la siguiente BD:


PROVEEDORES( nro-p,nom-p,categoría,ciud-p)
ITEMS(nro-i,descripción-i,ciud-i)
PEDIDOS(nro-p,nro-c,nro-i,cantidad,precio)
CLIENTES(nro-c,nom-c,ciud-c)

1. Listar los proveedores de Córdoba.


SELECT Nro_P, Nom_P
FROM PROVEEDORES
WHERE CIUD_P = 'CORDOBA';
2. Listar los proveedores que proveen el item "i1".
SELECT P.Nro_P, P.Nom_P
FROM ITEMS AS I, PEDIDOS AS PD, PROVEEDORES AS P

WHERE I.Descripcion_I = 'I1'

AND PD.Nro_I = I.Nro_I

AND P.Nro_P = PD.Nro_P;

3. Listar los clientes que solicitan items provistos por "p1".


SELECT C.NRO_C, C.Nom_C
FROM CLIENTES AS C, PEDIDOS AS PD, PROVEEDORES AS P

WHERE P.Nom_P = 'P1'

AND PD.Nro_P = P.Nro_P

AND C.Nro_C = PD.Nro_C;

4. Listar los clientes que solicitan algún ítem provisto por proveedores con categoria
mayor que 4.
SELECT DISTINCT CL.nro_c, CL.nom_c

FROM clientes CL

WHERE EXISTS (

SELECT *

FROM pedidos PE, proveedores PR

WHERE PE.nro_p = PR.nro_p

AND CL.nro_c = PE.nro_c

AND PR.categoria > 4

)
5. Listar los ítems pedidos por clientes de Rosario.
SELECT I.Nro_I, I.Descripcion_I

FROM ITEMS AS I

WHERE I.Nro_I IN (

SELECT PD.Nro_I

FROM CLIENTES AS C, PEDIDOS AS PD

WHERE C.Ciud_C = 'Rosario'

AND PD.Nro_C = C.Nro_C

);

6. Listar los pedidos en los cuales un cliente de Rosario solicita artículos


fabricados en Mendoza (ciud-i = "Mendoza").
SELECT PR.nom_p, CL.nom_c, IT.descripcion_i, PE.cantidad, PE.precio

FROM proveedores AS PR, clientes AS CL, items AS IT, pedidos AS PE

WHERE PR.nro_p = PE.nro_p

AND CL.nro_c = PE.nro_c

AND IT.nro_i = PE.nro_i

AND CL.ciud_c = 'rosario'

AND IT.ciud_i = 'mendoza';

7. Listar los pedidos en los que el cliente "23" solicita items no solicitados por el cliente
"30".
SELECT PR1.nom_p, CL1.nom_c, IT1.descripcion_i, PE1.cantidad, PE1.precio

FROM proveedores PR1, clientes CL1, items IT1, pedidos PE1

WHERE PR1.nro_p = PE1.nro_p

AND CL1.nro_c = PE1.nro_c

AND IT1.nro_i = PE1.nro_i

AND PE1.nro_c = 23

AND PE1.nro_i not in (

SELECT IT2.nro_i

FROM items IT2, pedidos PE2

WHERE IT2.nro_i = PE2.nro_i


AND PE2.nro_c = 30

);

8. Listar las ciudades en la forma (ciu1,ciu2 ) tales que un proveedor en ciu1 provea
items solicitados por clientes de ciu2.

SELECT DISTINCT P.Ciud_P AS Ciudad1, C.Ciud_C AS Ciudad2

FROM PROVEEDORES AS P, CLIENTES AS C, PEDIDOS AS PD

WHERE P.Nro_P = PD.Nro_P

AND C.Nro_C = PD.Nro_C;

9. Listar los números de proveedores cuya categoría sea mayor que la de


todos los proveedores que proveen el item "cuaderno".
SELECT P.Nro_P, P.Nom_P

FROM PROVEEDORES AS P

WHERE P.Categoria > (

SELECT MAX(P.Categoria)

FROM PROVEEDORES AS P, PEDIDOS as PD, ITEMS AS I

WHERE I.Descripcion_I = 'Cuaderno'

AND PD.Nro_I = I.Nro_I

AND P.Nro_P = PD.Nro_P

);

10. Listar los clientes que han pedido 2 o más ítems distintos.
SELECT DISTINCT PD1.Nro_C, C.Nom_C

FROM PEDIDOS AS PD1, PEDIDOS AS PD2, CLIENTES AS C

WHERE PD1.Nro_C = PD2.Nro_C

AND PD1.Nro_I <> PD2.Nro_I

AND C.Nro_C = PD1.Nro_C;


11. Listar los proveedores que proveen a todos los clientes de Córdoba una
cantidad mayor que el promedio de las cantidades pedidas por los clientes de
Rosario.
SELECT P.Nro_P, P.Nom_P

FROM PROVEEDORES AS P, PEDIDOS AS PD, CLIENTES AS C

WHERE C.Ciud_C = 'Cordoba'

AND PD.Nro_C = C.Nro_C

AND PD.Cantidad > (

SELECT AVG(SUMA)

FROM TEMP

AND P.Nro_P = PD.Nro_P

GROUP BY P.Nro_P, P.Nom_P

HAVING COUNT(C.Nro_C) = (

SELECT COUNT(C2.Nro_C)

FROM CLIENTES C2 , PEDIDOS PD2

WHERE C2.Ciud_C = 'Cordoba' AND

C2.Nro_C = PD2.Nro_C AND

PD2.Nro_P = P.Nro_P

);

EJERCICIO 2
Sea la siguiente Base de Datos:
VUELOS (nro-vuelo,desde,hasta)
AVION-UTILIZADO(nro-vuelo,tipo-avión,nro-avión)
INFO-PASAJEROS(nro-vuelo,dni,nombre,origen,destino)

Los vuelos no pueden tener más de dos escalas y no hay cambio de tipo de avión
para un mismo número de vuelo.
Realizar las siguientes consultas:

1. Listar los números de vuelo de A hasta F.


2. Listar los tipos de avión que no son utilizados en ningún vuelo que pase por B.
3. Listar los pasajeros y números de vuelo para aquellos pasajeros que viajan de
A a D pasando por B.
4. Listar los tipos de avión que son utilizados en todos los vuelos que pasan por C.
EJERCICIO 3
Sea la siguiente Base de Datos:

Empleado(nro_empleado,nombre,domicilio,localidad,antigüedad)
Funcion(nro_funcion,descripcion)
Planta(nro_planta,descripcion,localidad)
Tarea(nro_empleado, nro_funcion)
Organización(nro_planta,nro_funcion)
Trabaja(nro_empleado, nro_planta)
Distancia(localidad1, localidad2,distancia)

Escribir en Algebra Relacional la siguiente consulta:


Listar los nombres de los empleados que viven más lejos de su lugar de trabajo.

EJERCICIO 4
Sea la siguiente Base de Datos:

Artículos(nro_art,descripcion,peso,precio_unit,fabricado_en)
Facturas(nro_fact, nro_cli, fecha, fecha_venc)
DetalleFactura(nro_fact,nro_art,cant)
Clientes(nro_cli, nombre, domicilio, ciudad, País, Ocupación)
Expresar la siguiente consulta en Algebra Relacional:
Listar los nombres de los clientes que hayan comprado al menos 2 artículos distintos.

EJERCICIO 5
Sea la siguiente Base de Datos:

Personas(nro_doc, nombre, domicilio)


Supervisa_a(nro_doc_supervisor,nro_doc_supervisado)
Asumir que cada persona es supervisada a lo sumo por un supervisor.

Escribir en AR la siguiente consulta:


Listar los nombres de las personas que trabajan con Juan Perez (suponer que
existe un único Juan Perez)

EJERCICIO 6
Sea la siguiente Base de Datos:

Empleados(nro_e, nombre, domicilio, ciudad)


Asignado_a(nro_e, cod_tarea, cant_horas)
Tareas(cod_tarea, desc_tarea)

Escribir en AR la siguiente consulta, sin utilizar operadores derivados:


Listar los nombres de las personas asignadas a todas las tareas.

EJERCICIO 7
Para la siguiente base de datos:

ALUMNOS(nroLeg,nombre,domicilio,planDeEstudios)
MATERIAS(nroMat,nombre,planDeEstudios)
EXAMENES(nroLeg,nroMat,nota,fecha)
CURSAN(nroLeg, nroMat)
CORRELATIVA(nroMat,nroCorrelat)

Expresar en Algebra Relacional la siguiente consulta:


Listar los nombres de los alumnos que no cursan ninguna materia de la cual hayan
rendido su correlativa al menos dos veces.

EJERCICIO 8
Sea la siguiente base de datos:

ALUMNOS(nroLeg,nombre,domicilio,planDeEstudios)
MATERIAS(nroMat,nombre,planDeEstudios)
EXAMENES(nroLeg,nroMat,nota,fecha)
CURSAN(nroLeg, nroMat)

Expresar en Algebra Relacional la siguiente consulta:


Listar los nombres de los alumnos que no cursan ninguna materia en la cual ningún
alumno que rindió la materia al menos 2 veces obtuvo una nota mayor que 6 en un
final.

EJERCICIO 9
Para la siguiente base de datos:

ALUMNOS(dni, nombre,apellido,nacionalidad)
FACULTADES(codfacultad, nombre)
CARRERAS(codcarrera, nombre,codfacultad,cantidadDeAlumnos) codfacultad
foreign key references facultades(codfacultad)
ESTUDIANTEDE(dni,codcarrera)

Expresar en Algebra Relacional la consulta:


Listar los nombres de los estudiantes que no estudian carreras que se dictan en
facultades en las que estudia algún estudiante español.
EJERCICIO 10
Sea la siguiente base de datos:

ALUMNOS(nro_leg,nombre,domicilio,plan_de_estudios)
CURSOS(nro_curso,nombre,horario)
MATERIAS(nro_mat,nombre,plan_de_estudios)
APROBO(nro_leg,nro_mat,nota)

Expresar la siguiente consulta en Algebra Relacional:

1. Listar los nombres de los alumnos que aprobaron solamente


materias correspondientes a su plan de estudios.
2. Listar las materias aprobadas con 9 puntos por al menos 2 alumnos que no
hayan cursado ninguna materia del plan 96.
3. Listar las materias no aprobadas por ningun alumno que haya obtenido mas
de 8 puntos en alguna materia correspondiente a su mismo plan de estudios.

EJERCICIO 11
Dada la BD:
FRECUENTA(nombre-pers,nombre-bar)
SIRVE(nombre-bar,nombre-cerveza)
GUSTA(nombre-persona,nombre-cerveza)

1. Encontrar las personas que frecuentan un bar que sirve una cerveza que les
gusta. 2. Encontrar las personas que beben en el mismo bar que las personas a las
que les gusta la cerveza "Quilmes".

SELECT DISTINCT FAux.Nombre_Pers


FROM FRECUENTA AS F, SIRVE AS S, GUSTA AS G, Frecuenta AS FAux

WHERE G.Nombre_Cerveza = 'Quilmes'

AND S.Nombre_Cerveza = G.Nombre_Cerveza

AND F.Nombre_Bar = S.Nombre_Bar

AND F.Nombre_Pers = G.Nombre_Pers

AND FAux.Nombre_Pers <> F.Nombre_Pers

AND FAux.Nombre_Bar = F.Nombre_Bar;

3. Encontrar las personas que beben en el mismo bar que aquellas a las que le
gusta una marca de cerveza que sirva dicho bar y que le guste a Juan Perez.
SELECT DISTINCT FAux.Nombre_Pers

FROM FRECUENTA AS F, SIRVE AS S, GUSTA AS G, Frecuenta AS FAux

WHERE G.Nombre_Cerveza IN (

SELECT Nombre_Cerveza

FROM GUSTA

WHERE Nombre_Pers = 'Juan Perez'

AND S.Nombre_Cerveza = G.Nombre_Cerveza

AND F.Nombre_Bar = S.Nombre_Bar

AND F.Nombre_Pers = G.Nombre_Pers

AND FAux.Nombre_Pers <> F.Nombre_Pers

AND FAux.Nombre_Bar = F.Nombre_Bar;


4. Encontrar las personas que frecuentan solamente bares que sirven alguna
cerveza que les guste.(asumir que cada persona frecuenta al menos un bar y le
gusta al menos una cerveza)
SELECT DISTINCT G.Nombre_Pers

FROM FRECUENTA AS F, SIRVE AS S, GUSTA AS G

WHERE F.Nombre_Pers = G.Nombre_Pers AND

F.Nombre_Bar = S.Nombre_Bar AND

G.Nombre_Cerveza = S.Nombre_Cerveza

GROUP BY G.Nombre_Pers

HAVING COUNT(F.Nombre_Bar) = (SELECT COUNT(F1.Nombre_Bar) FROM


FRECUENTA F1 WHERE G.Nombre_Pers = F1.Nombre_Pers );

5. Encontrar las personas que no frecuentan ningún bar que sirva alguna cerveza que
le guste.
SELECT DISTINCT F.Nombre_Pers

FROM FRECUENTA AS F

WHERE NOT EXISTS(

SELECT FAux.Nombre_Pers

FROM FRECUENTA AS FAux, SIRVE AS S, GUSTA AS G

WHERE S.Nombre_Cerveza = G.Nombre_Cerveza

AND FAux.Nombre_Bar = S.Nombre_Bar

AND FAux.Nombre_Pers = G.Nombre_Pers

);

EJERCICIO 12
Sea la BD:
PERSONAS(tipo-doc,num-doc,nomyap,dir,tel,fnac,sexo)
PROGENITOR(tipo-doc,num-doc,tipo-doc-hijo,num-doc-hijo)

1. Listar para cada Juan Perez los tipo y número de documento, nombre y
apellido y teléfonos de todos sus hijos.
SELECT DISTINCT PH.*

FROM PERSONAS AS PH, PERSONAS AS PP, PROGENITOR AS P

WHERE PP.NomYAp = 'Juan Perez'


AND P.Tipo_Doc = PP.Tipo_Doc

AND P.Nro_Doc = PP.Num_Doc

AND PH.Tipo_Doc = P.Tipo_Doc_Hijo

AND PH.Num_Doc = P.Nro_Doc_Hijo;

2. b.-Idem a ,de :
1. todos sus hermanos ( los hijos de su padre y/o su madre).
SELECT DISTINCT PH.*

FROM PERSONAS AS PH, PERSONAS AS PP, PROGENITOR AS P1, PROGENITOR AS


P2

WHERE PP.NomYAp = 'Juan Perez'

AND P1.Tipo_Doc_Hijo = PP.Tipo_Doc

AND P1.Nro_Doc_HIjo = PP.Num_Doc

AND P2.Tipo_Doc = P1.Tipo_Doc

AND P2.Nro_Doc = P1.Nro_Doc

AND PH.Tipo_Doc = P2.Tipo_Doc_Hijo

AND PH.Num_Doc = P2.Nro_Doc_Hijo

AND PH.NomYAp <> PP.NomYAp;

2. su madre.
SELECT DISTINCT PM.*

FROM PERSONAS AS PM, PERSONAS AS PP, PROGENITOR AS P

WHERE PP.NomYAp = 'Juan Perez'

AND P.Tipo_Doc_Hijo = PP.Tipo_Doc

AND P.Nro_Doc_HIjo = PP.Num_Doc

AND PM.Tipo_Doc = P.Tipo_Doc

AND PM.Num_Doc = P.Nro_Doc

AND PM.Sexo = 'F';


3. su abuelo materno.
SELECT DISTINCT PA.*

FROM PERSONAS AS PM, PERSONAS AS PP, PERSONAS AS PA, PROGENITOR AS


P1, PROGENITOR AS P2

WHERE PP.NomYAp = 'Juan Perez'

AND P1.Tipo_Doc_Hijo = PP.Tipo_Doc

AND P1.Nro_Doc_HIjo = PP.Num_Doc

AND PM.Tipo_Doc = P1.Tipo_Doc

AND PM.Num_Doc = P1.Nro_Doc

AND PM.Sexo = 'F'

AND P2.Tipo_Doc_Hijo = PM.Tipo_Doc

AND P2.Nro_Doc_HIjo = PM.Num_Doc

AND PA.Tipo_Doc = P2.Tipo_Doc

AND PA.Num_Doc = P2.Nro_Doc

AND PA.Sexo = 'M';

4. todos sus nietos.


SELECT DISTINCT PN.*
FROM PERSONAS AS PH, PERSONAS AS PP, PERSONAS AS PN, PROGENITOR AS
P1, PROGENITOR AS P2

WHERE PP.NomYAp = 'Juan Perez'

AND P1.Tipo_Doc = PP.Tipo_Doc

AND P1.Nro_Doc = PP.Num_Doc

AND PH.Tipo_Doc = P1.Tipo_Doc_Hijo

AND PH.Num_Doc = P1.Nro_Doc_Hijo

AND P2.Tipo_Doc = PH.Tipo_Doc

AND P2.Nro_Doc = PH.Num_Doc

AND PN.Tipo_Doc = P2.Tipo_Doc_Hijo

AND PN.Num_Doc = P2.Nro_Doc_Hijo;


EJERCICIO 13
Una oficina gubernamental desea construir un complejo habitacional, para lo cual
elaboró la siguiente Base de Datos:
TRAMO( c_ciudadA, c_ciudadB, Distancia).
CIUDADES( c_ciudad, nombre, cant_escuelas, cant_fábricas).
Para decidir dónde instalarlo, desea conocer los siguientes datos:

1. Las ciudades alcanzables desde la ciudad con mayor cantidad de fábricas,


recorriendo no más de 2 tramos, c/u de los cuales no puede tener más de 10Km de
longitud.
SELECT CB.Nombre

FROM CIUDADES CA, TRAMO T, CIUDADES CB

WHERE CA.Cant_Fabricas = (

SELECT MAX(Cant_Fabricas)

FROM CIUDADES

AND T.Distancia <= 10

AND T.C_CiudadA = CA.C_Ciudad

AND CB.C_Ciudad = T.C_CiudadB

AND CB.C_Ciudad <> CA.C_Ciudad

UNION

SELECT CB.Nombre

FROM CIUDADES CA, TRAMO T1, TRAMO T2, CIUDADES CB

WHERE CA.Cant_Fabricas = (

SELECT MAX(Cant_Fabricas)

FROM CIUDADES)

AND T1.Distancia <= 10

AND T2.Distancia <= 10

AND T1.C_CiudadA = CA.C_Ciudad

AND T1.C_CiudadB = T2.C_CiudadA

AND CB.C_Ciudad = T2.C_CiudadB

AND CB.C_Ciudad <> CA.C_Ciudad;


2. Las ciudades con más de 10 fábricas, que estén conectadas en forma directa
con todas las demás, siempre que ningún tramo supere los 50 Km.
SELECT DISTINCT C_Ciudad, C.Nombre

FROM CIUDADES AS C, TRAMO AS T

WHERE C.Cant_Fabricas > 10 AND

C.C_Ciudad = T.C_CiudadA AND

T.Distancia < 50

GROUP BY C.C_CIUDAD, C.Nombre

HAVING COUNT(C.C_Ciudad) = (

SELECT COUNT (C1.C_CIUDAD) - 1

FROM CIUDADES C1

);

3. Los pares de ciudades, de la forma (ciudad1,ciudad2), que son alcanzables a


través de, a lo sumo, otra ciudad, llamemos a ésta, ciudad3 (esto es, encontrar lo
caminos ciudad1-ciudad3-ciudad2).
SELECT CA.Nombre, CB.Nombre

FROM CIUDADES AS CA, TRAMO AS T1, TRAMO AS T2, CIUDADES AS CB

WHERE T1.C_CiudadA = CA.C_Ciudad

AND T1.C_CiudadB = T2.C_CiudadA

AND CB.C_Ciudad = T2.C_CiudadB

AND CB.C_Ciudad <> CA.C_Ciudad;

EJERCICIO 14
Sea la siguiente Base de Datos:
Artículos(nro_art,descripcion,color,peso,precio_unit,fabricado_en)
Factura(nro_fact,nro_cli,fecha, fecha_venc)
DetalleFactura(nro_fact,nro_art,cant)
Clientes(nro_cli, nombre, domicilio, ciudad, País, Ocupación)

Escribir en AR y SQL la siguiente consulta:


Listar la descripción de los artículos que no fueron facturados a ningún cliente al que
se le facturó más de 2(DOS) veces algún artículo de color rojo.

También podría gustarte