Ejemplos Cálculo Relacional Francisco Moreno 04/12/2018 Curso Bases de Datos
CP CA S P CP s# snombre situacion ciudad S1 Salazar 20 Londres S2 Jaramillo 10 París S3 Bernal 30 París S4 Caicedo 20 Londres S5 Aldana 30 Atenas P p# pnombre color peso ciudad P1 Tuerca Rojo 12 Londres P2 Perno Verde 17 París P3 Tornillo Azul 17 Roma P4 Tornillo Rojo 14 Londres P5 Leva Azul 12 París P6 Rueda Rojo 19 Londres CP 04/12/2018 Curso Bases de Datos
SP s# p# cantidad S1 P1 300 S1 P2 200 S1 P3 400 S1 P4 200 S1 P5 100 CF hacia P SP s# p# cantidad S1 P1 300 S1 P2 200 S1 P3 400 S1 P4 200 S1 P5 100 S1 P6 100 S2 P1 300 S2 P2 400 S3 P3 200 S4 P2 200 S4 P4 300 S4 P5 400 CF hacia S CP 04/12/2018 Curso Bases de Datos
Se resolverán algunos de los ejemplos presentados en álgebra y SQL. Obtener los datos de todos los proveedores de Paris con situación mayor a 10. {sx | sx Î S Ù sx[ciudad] = ‘Paris’ Ù sx[situacion] > 10 } 04/12/2018 Curso Bases de Datos
Obtener solo los códigos de los proveedores de Roma. {t | $ sx Î S ( t[s#] = sx[s#] Ù sx[ciudad] = ‘Roma’ ) } t está definida sobre t[s#] 04/12/2018 Curso Bases de Datos
{sx |sx Î S Ù $ spx Î SP (sx[s#] = spx[s#] Ù spx[p#] = ‘P2’ ) } Obtener todos los datos de los proveedores que suministran el producto P2. {sx |sx Î S Ù $ spx Î SP (sx[s#] = spx[s#] Ù spx[p#] = ‘P2’ ) } 04/12/2018 Curso Bases de Datos
{t | $ sx Î S (t[snombre] = sx[snombre] Ù Obtener solo los nombres de los proveedores que suministran el producto P2. {t | $ sx Î S (t[snombre] = sx[snombre] Ù $ spx Î SP (sx[s#] = spx[s#] Ù spx[p#] = ‘P2’ ) } t está definida sobre t[snombre] 04/12/2018 Curso Bases de Datos
{t | $ sx Î S (t[snombre] = sx[snombre] Ù Obtener los nombres de los proveedores que NO suministran el producto P2. {t | $ sx Î S (t[snombre] = sx[snombre] Ù Ø $ spx Î SP (sx[s#] = spx[s#] Ù spx[p#] = ‘P2’ ) } 04/12/2018 Curso Bases de Datos
(t[snombre] = sx[snombre] Ù px Î P ($ spx Î SP (sx[s#] = spx[s#] Ù Obtener solo los nombres de los proveedores que suministran todos los productos: {t | $ sx Î S (t[snombre] = sx[snombre] Ù px Î P ($ spx Î SP (sx[s#] = spx[s#] Ù px[p#] = spx[p#] ) } 04/12/2018 Curso Bases de Datos
(t[snombre] = sx[snombre] Ù $ spx Î SP (sx[s#] = spx[s#] Ù Obtener los nombres de los proveedores que suministran por lo menos un producto rojo {t | $ sx Î S (t[snombre] = sx[snombre] Ù $ spx Î SP (sx[s#] = spx[s#] Ù $ px Î P (spx[p#] = px[p#] Ù px[color] = ‘Rojo’ ) } 04/12/2018 Curso Bases de Datos
O intercambiando los dos $ internos: {t | $ sx Î S (t[snombre] = sx[snombre] Ù $ px Î P (px[color] = ‘Rojo’ Ù $ spx Î SP (spx[s#] = sx[s#] Ù spx[p#] = px[p#] ) } 04/12/2018 Curso Bases de Datos
sx1[ciudad] = sx2[ciudad] ) } ¿Qué pasa si se incluye la condición: Imprimir los códigos de las parejas de proveedores que están situados en la misma ciudad. {t | $ sx1 Î S ( $ sx2 Î S ( t[s# AS s#1] = sx1[s#] Ù t[s# AS s#2] = sx2[s#] Ù sx1[ciudad] = sx2[ciudad] ) } ¿Qué pasa si se incluye la condición: sx1[s#] < sx2[s#] en esta consulta? 04/12/2018 Curso Bases de Datos
Ej: ¿Qué hace la siguiente consulta? El cálculo (originalmente) no incluye operaciones de agregación (similares al operador Ģ del álgebra), aun así hay algunos problemas de agregación que se pueden resolver en cálculo Ej: ¿Qué hace la siguiente consulta? {t | t Î P Ù Ø $ px Î P (px[peso] < t[peso])} 04/12/2018 Curso Bases de Datos
Ejercicios: Resolver la consulta anterior usando en vez de $ Obtener los nombres de los proveedores que no venden productos rojos Obtener los nombres de los proveedores que suministran al menos todos los productos suministrados por el proveedor S2 04/12/2018 Curso Bases de Datos