El álgebra relacional es un lenguaje formal con una serie de operadores que trabajan sobre una o varias relaciones para obtener otra relación resultado, sin que cambien las relaciones originales. Tanto los operandos como los resultados son relaciones, por lo que la salida de una operación puede ser la entrada de otra operación. Esto permite anidar expresiones del álgebra, del mismo modo que se pueden anidar las expresiones aritméticas. A esta propiedad se le denomina clausura: las relaciones son cerradas bajo el álgebra, del mismo modo que los números son cerrados bajo las operaciones aritméticas.
En este apartado se presentan los operadores del álgebra relacional de un modo informal. Las definiciones formales pueden encontrarse en la bibliografía que se comenta al final del capítulo. Primero se describen los ocho operadores originalmente propuestos por Codd y después se estudian algunos operadores adicionales que añaden potencia al lenguaje.
De los ocho operadores, sólo hay cinco que son fundamentales: restricción, proyección, producto cartesiano, unión y diferencia, que permiten realizar la mayoría de las operaciones de obtención de datos. Los operadores no fundamentales son la concatenación (join), la intersección y la división, que se pueden expresar a partir de los cinco operadores fundamentales.
La restricción y la proyección son operaciones unarias porque
operan sobre una sola relación. El resto de las operaciones son
binarias porque trabajan sobre pares de relaciones.
En las definiciones que se presentan a continuación, se supone que R
y S son dos relaciones cuyos atributos son
A=(a
, a
, ..., a
)
y B=(b
, b
, ..., b
) respectivamente.
PLANTILLA WHERE salario>15000
| Enum | Nombre | Apellido | Dirección | Teléfono | Puesto | Fecha_nac | Salario | DNI | Onum |
| EL21 | Amelia | Pastor | Magallanes, 15 | 964 284 560 | Director | 12/10/62 | 30000 | 39432212E | O5 |
| Castellón | |||||||||
| EG37 | Pedro | Cubedo | Bayarri, 11 | 964 535 690 | Supervisor | 24/3/57 | 18000 | 38766623X | O3 |
| Villarreal | |||||||||
| EA9 | Rita | Renau | Casalduch, 32 | 964 257 550 | Supervisor | 19/5/60 | 18000 | 39233190F | O7 |
| Castellón | |||||||||
| EG5 | Julio | Prats | Melilla, 23 | 964 524 590 | Director | 19/12/50 | 24000 | 25644309X | O3 |
| Villarreal | |||||||||
| EL41 | Carlos | Baeza | Herrero, 51 | 964 247 250 | Supervisor | 29/2/67 | 18000 | 39552133T | O5 |
| Castellón |
INMUEBLE WHERE población=`Castellón' AND alquiler<=350
| Inum | Calle | Area | Población | Tipo | Hab | Alquiler | Pnum |
| IL94 | Riu Ebre, 24 | Ronda Sur | Castellón | Piso | 4 | 350 | P87 |
| IG4 | Sorell, 5 | Grao | Castellón | Piso | 3 | 300 | P40 |
| IG36 | Alicante,1 | Segorbe | Piso | 3 | 325 | P93 |
PLANTILLA [enum,nombre,apellido,salario]
| Enum | Nombre | Apellido | Salario |
| EL21 | Amelia | Pastor | 30000 |
| EG37 | Pedro | Cubedo | 18000 |
| EG14 | Luis | Collado | 12000 |
| EA9 | Rita | Renau | 18000 |
| EG5 | Julio | Prats | 24000 |
| EL41 | Carlos | Baeza | 18000 |
PLANTILLA [puesto]
| Puesto |
| Director |
| Supervisor |
| Administ. |
La restricción y la proyección son operaciones que permiten
extraer información de una sola relación. Habrá casos en que
sea necesario combinar la información de varias relaciones.
El producto cartesiano ``multiplica" dos relaciones, definiendo una
nueva relación que tiene todos los pares posibles de tuplas
de las dos relaciones. Si la relación R tiene
tuplas y
atributos y la relación S tiene
tuplas y
atributos,
la relación resultado tendrá
tuplas y
atributos.
Ya que es posible que haya atributos con el mismo nombre en las
dos relaciones, el nombre de la relación se antepondrá al del
atributo en este caso para que los nombres de los atributos sigan
siendo únicos en la relación resultado.
INQUILINO[qnum,nombre,apellido] TIMES VISITA[qnum,inum,comentario]
| INQUILINO.Qnum | Nombre | Apellido | VISITA.Qnum | Inum | Comentario |
| Q76 | Juan | Felip | Q56 | IA14 | muy pequeño |
| Q76 | Juan | Felip | Q76 | IG4 | muy lejos |
| Q76 | Juan | Felip | Q56 | IG4 | |
| Q76 | Juan | Felip | Q62 | IA14 | no tiene salón |
| Q76 | Juan | Felip | Q56 | IG36 | |
| Q56 | Ana | Grangel | Q56 | IA14 | muy pequeño |
| Q56 | Ana | Grangel | Q76 | IG4 | muy lejos |
| Q56 | Ana | Grangel | Q56 | IG4 | |
| Q56 | Ana | Grangel | Q62 | IA14 | no tiene salón |
| Q56 | Ana | Grangel | Q56 | IG36 | |
| Q74 | Elena | Abaso | Q56 | IA14 | muy pequeño |
| Q74 | Elena | Abaso | Q76 | IG4 | muy lejos |
| Q74 | Elena | Abaso | Q56 | IG4 | |
| Q74 | Elena | Abaso | Q62 | IA14 | no tiene salón |
| Q74 | Elena | Abaso | Q56 | IG36 | |
| Q62 | Alicia | Mori | Q56 | IA14 | muy pequeño |
| Q62 | Alicia | Mori | Q76 | IG4 | muy lejos |
| Q62 | Alicia | Mori | Q56 | IG4 | |
| Q62 | Alicia | Mori | Q62 | IA14 | no tiene salón |
| Q62 | Alicia | Mori | Q56 | IG36 |
Como se puede observar, la relación resultado contiene más información de la que se necesita. Por ejemplo, la primera tupla tiene distintos números de inquilino: el comentario realizado en la visita no corresponde al inquilino cuyo nombre y apellido se muestra. Para obtener el listado que se pide en el ejemplo, es necesario realizar una restricción para quedarse solamente con las tuplas en donde INQUILINO.Qnum = VISITA.Qnum.
(INQUILINO[qnum,nombre,apellido] TIMES VISITA[qnum,inum,comentario])
WHERE inquilino.qnum=visita.qnum
| INQUILINO.Qnum | Nombre | Apellido | VISITA.Qnum | Inum | Comentario |
| Q76 | Juan | Felip | Q76 | IG4 | muy lejos |
| Q56 | Ana | Grangel | Q56 | IA14 | muy pequeño |
| Q56 | Ana | Grangel | Q56 | IG4 | |
| Q56 | Ana | Grangel | Q56 | IG36 | |
| Q62 | Alicia | Mori | Q62 | IA14 | no tiene salón |
Se dice que dos relaciones son compatibles para la unión si ambas tienen la misma cabecera, es decir, si tienen el mismo número de atributos y éstos se encuentran definidos sobre los mismos dominios. En muchas ocasiones será necesario realizar proyecciones para hacer que dos relaciones sean compatibles para la unión.
OFICINA[área] UNION INMUEBLE[área]
| Area |
| Centro |
| Grao |
| Ronda Sur |
| Rafalafena |
OFICINA[población] MINUS INMUEBLE[población]
| Población |
| Villarreal |
INQUILINO JOIN VISITA
Esta expresión obtiene el mismo resultado que la expresión final del ejemplo 4.5, ya que la concatenación es, en realidad, un producto cartesiano y una restricción de igualdad sobre los atributos comunes.
INMUEBLE JOIN VISITA (+)
| Inum | Calle | Población | Qnum | Fecha | Comentario |
| IA14 | Enmedio, 128 | Castellón | Q56 | 24/11/99 | muy pequeño |
| IA14 | Enmedio, 128 | Castellón | Q62 | 14/11/99 | no tiene salón |
| IL94 | Riu Ebre, 24 | Castellón | |||
| IG4 | Sorell, 5 | Castellón | Q76 | 20/10/99 | muy lejos |
| IG4 | Sorell, 5 | Castellón | Q56 | 26/11/99 | |
| IG36 | Alicante,1 | Segorbe | Q56 | 28/10/99 | |
| IG21 | San Francisco, 10 | Vinaroz | |||
| IG16 | Capuchinos, 19 | Castellón |
La intersección se puede expresar en términos de diferencias:
VISITA[qnum,inum] DIVIDEBY (INMUEBLE WHERE hab=3)[inum]
| Qnum |
| Q56 |
Además de las operaciones que Codd incluyó en el álgebra relacional, otros autores han aportado otras operaciones para dar más potencia al lenguaje. Es de especial interés la agrupación, también denominada resumen, que añade capacidad computacional al álgebra.
Los cálculos que se pueden realizar sobre los grupos de filas son:
suma de los valores de un atributo ( SUM(a
)),
media de los valores de un atributo ( AVG(a
)),
máximo y mínimo de los valores de un atributo ( MAX(a
),
MIN(a
)) y
número de tuplas en el grupo ( COUNT(*)).
La relación resultado tendrá tantas filas como grupos se hayan
obtenido.
SUMMARIZE PLANTILLA GROUPBY(oficina) ADD SUM(salario) AS salario_total
| Oficina | Salario_total |
| O5 | 48000 |
| O3 | 54000 |
| O7 | 18000 |