Reunión
Las reuniones se pueden
expresar como un producto cartesiano seguido de una selección.
La definición de la forma
en la cual la selección trata los nulos también define la forma en que la
operación reunión trata los nulos.
En una reunión natural, si
dos tuplas tienen valor nulo en el atributo común, las tuplas no casan.
Se utiliza la equivalencia reunión = selección
(producto cartesiano)
Por tanto dos tuplas con valor nulo en el atributo
común no coinciden.
Ejemplos:
Ø Para el siguiente esquema se pide obtener el DNI de
los empleados que trabajan en el departamento “Contabilidad”. EMP
(DNI, NUMDEP) DPTO (ND, NOMD)
Solución:
R1 ← σNOMD = “Contabilidad” (DPTO) /* Tuplas con NOMD =
“Contabilidad” */
R2 ← EMP NUMDEP = ND R1 /* Tuplas de los empleados de
“Contabilidad”. */
RES ← ΠDNI (R2)
Ø Dado el siguiente esquema, obtener el nombre de los
propietarios de coches modelo “Ferrari F50”.
CLIENTES (DNI, NOM, DIR) COCHES
(MATR, MODELO, ANIO)PROPIEDAD (DNI,MATR)
Solución:
R1 ← σMODELO = “Ferrari F50” (COCHES)
/* Tuplas del
modelo “Ferrari F50” */
R2 ← PROPIEDAD R1
/* DNI de
propietarios junto a los datos de sus coches */
RES ← ΠNOM (CLIENTES R2)
/* Nombre de
los propietarios de “Ferrari F50” */
Proyección Generalizada
Los nulos en las
expresiones de los atributos en la proyección generalizada se tratan como en cualquier
expresión.
Las tuplas
duplicadas que contienen valores nulos se tratan como en la operación
proyección.
Ejemplos:
Ø Averiguar el importe de crédito disponible para cada línea de crédito
activa (límite de crédito: 25000)
Πnumero_prestamo, 25000-importe (Préstamo)
Πnumero_prestamo, (25000-importe) as
disponible (Préstamo)
numero_prestamo disponible
P-13 15000
P-23 16300
P-18 9900
Funciones de Agregación
Cuando hay nulos en
atributos agregados, la operación borra los valores nulos del resultado antes
de aplicar la agregación.
El tratamiento de los
valores nulos aquí es diferente al realizado en las operaciones aritméticas
<- aplicarlo como en las operaciones aritméticas significaría que un único
valor desconocido en un gran grupo podría hacer que el resultado agregado sobre
el grupo fuese nulo, y se perdería una gran cantidad de información útil.
Ejemplos:
Ø Averiguar la suma total de los sueldos de los empleados del banco
G sum(sueldo)(EmpleadosTP)
EmpleadosTP
Nombre_ empleado
|
Nombre_sucursal
|
sueldo
|
Ribera
|
Fingoi
|
1800
|
Fernández
|
Plaza Roja
|
1450
|
Jiménez
|
Murallas
|
2900
|
Díaz
|
Fingoi
|
3900
|
González
|
Principal
|
2700
|
Averiguar número de sucursales en los que hay al menos un empleado a
tiempo parcial
G
count-distinct(nombre_sucursal)(EmpleadosTP)
Hallar la suma total de sueldos de los empleados a tiempo parcial por sucursal
EmpleadosTP
Nombre_ empleado
|
Nombre_sucursal
|
sueldo
|
Ribera
|
Fingoi
|
1800
|
Fernández
|
Plaza Roja
|
1450
|
Jiménez
|
Murallas
|
2900
|
Díaz
|
Fingoi
|
3900
|
González
|
Principal
|
2700
|
nombre_sucursalG sum(sueldo) (EmpleadosTP)
nombre_sucursal
|
suma de sueldo
|
Plaza Roja
|
1450
|
Murallas
|
2900
|
Fingoi
|
5700
|
Principal
|
2700
|
Reunión Externa
Las operaciones de reunión
externa se comportan como las operaciones de reunión, excepto sobre las tuplas
que no aparecen en el resultado.
Funciona de manera similar para aquellas tuplas que
cumplan las condiciones de reunión.
Para el resto de tuplas, dependiendo del tipo de
reunión externa, se incluirán el resto de tuplas rellenando con valores nulos.
Ejemplos:
Ø
Ø Generar una única relación que contenga toda la información de los
empleados (calle, ciudad, sucursal y sueldo)
Empleado
Nombre
|
Calle
|
Ciudad
|
Valdivieso
|
Pimentel
|
Lugo
|
Gómez
|
Jazmín
|
Rábade
|
Domínguez
|
La Rosa
|
Santiago
|
Segura
|
Diputación
|
Lugo
|
Empleado TC
Nombre
|
sucursal
|
sueldo
|
|
Valdivieso
|
Fingoi
|
5300
|
|
Gómez
|
Principal
|
8000
|
|
Domínguez
|
Principal
|
12000
|
|
Segura
|
Fingoi
|
3000
|
No hay comentarios:
Publicar un comentario