Tendremos dos componentes principales: el álgebra relacional, y el Cálculo Relacional. El cálculo nos dirá qué obtener, y el álgebra nos dirá cómo lo obtendremos.
El álgebra relacional es un lenguaje de manipulación de datos procedural, mientras que el cálculo relacional será un lenguaje declarativo.
Definiciones
Este lenguaje especifica los procedimientos de consultas de datos a partir de un conjunto de operaciones.
Una operación es una función cuyos operandos son una o más relaciones, y cuyo resultado es también una relación.
Las operaciones del álgebra relacional pueden combinarse entre ellos para formar una expresión.
La aridad es la cantidad de operandos que toma una operación.
Operaciones Unarias
Selección
El operador de selección es un operador unario. Dada una relación y una condición que se aplica a cada tupla de , selecciona aquellas tuplas de para las cuales la condición es verdadera.
Como condición, utilizaremos condiciones de la forma:
Donde es un operador de comparación: , , , , , .
Estas condiciones se pueden combinar con operadores lógicos de conjunción , disyunción , y negación .
Proyección
El operador de proyección es también un operador unario. Dada una relación y una lista de atributos , devuelve una relación cuyas tuplas representan los posibles valores de los atributos de en .
El orden de los atributos dependerá es el mismo orden que figura en .
Este operador elimina las tuplas duplicadas, ya que su resultado debe ser relación válida.
SQL
Se puede combinar la selección con la proyección con el comando
SELECT Rows FROM Table WHERE Condition
Asignación
Nos permite asignar el resultado de una operación a una variable. Podemos generar operaciones complejas al concatenar múltiples operaciones.
También se denota con el símbolo de igualdad
Redenominación
El operador de redenominación nos permite modificar los nombres de los atributos de una relación y/o de la relación misma. Nos permite preparar el resultado para una operación posterior.
Dada una relación , un nuevo nombre de relación y una lista de atributos . Entonces produce una relación de nombre y atributos cuyas tuplas coinciden con las tuplas de .
Si se omiten los atributos, solo se cambia el nombre de la relación. Para cambiar el nombre de únicamente un atributo, podemos utilizar .
Operaciones Binarias
Unión
Dadas dos relaciones , entonces la unión es una relación que contiene a todas las tuplas de y de .
Es necesario que y tengan el mismo grado.
Es necesario que haya compatibilidad de tipo. Deben coincidir en sus atributos en lo que respecta al dominio. Es decir, siendo los atributos de y los atributos de , entonces .
Por convención, en la relación resultada el listado de atributos coincide con el de
Intersección
Dadas dos relaciones y , la intersección conserva las tuplas que se encuentran en ambas relaciones.
Es necesario que tengan el mismo grado y haya compatibilidad de tipo. Por convención, en la relación resultada el listado de atributos coincide con el de .
Diferencia
Dadas dos relaciones , conserva las tuplas que se encuentran presentes en pero no en .
Es necesario que tengan el mismo grado y haya compatibilidad de tipo. Por convención, en la relación resultada el listado de atributos coincide con el de .
Producto Cartesiano
Dadas dos relaciones , el producto cartesiano produce una nueva relación , con una tupla por cada combinación posible de una tupla de con una tupla de .
Si dos columnas tienen el mismo nombre , entonces se diferencian en la tabla final como . En el caso de estar calculando , llamaremos a sus atributos y
En general, debe estar acompañado de una selección para reducir la cantidad de filas.
Esta operación no requiere que tengan el mismo grado, ni que haya compatibilidad de tipos.
SQL
Automáticamente realiza un producto cartesiano cuando se seleccionan dos tablas relacionadas en un
SELECT.
Junta
Dadas dos relaciones y una condición, la junta selecciona del producto cartesiano las tuplas que cumplen la condición.
No se admite cualquier condición, solo aquellas que incluyen un atributo de cada relación, es decir, de la forma . Además, únicamente se puede utilizar el operador lógico de conjunción .
SQL
Para realizar una junta, podemos utilizar el comando
INNER JOINdentro de unSELECT.
La junta más general se conoce como junta theta (theta join). Cuando solo utilizamos comparaciones de igualdad en sus condiciones atómicas, se denomina junta por igual (equijoin). En estas juntas, el resultado dispondrá de pares de atributos distintos que poseerán información redundante. Para librarse de uno de ellos, se define la junta natural.
Junta Natural
Dadas dos relaciones con un atributo en común tal que , entonces la junta natural devolverá una junta entre ambos, conservando únicamente las tuplas tal que , y descartando el atributo .
En la junta natural no se especifican las condiciones, por lo que se utilizaran automáticamente los atributos con igual nombre. Estos atributos se denominan atributos de junta.
División
Es una operación inversa al producto cartesiano. Dadas dos relaciones , la división nos devuelve…
Partimos de una relación y una relación tal que . Definimos .
Luego, se define la división como la relación , que contiene todas las tuplas que cumplan que, para cada tupla , existe una tupla tal que y .
En otras palabras, nos devuelve una relación con todas las tuplas de tal que su combinación con cualquier tupla de pertenezca a .
La relación es la de mayor cardinalidad posible contenida en y que cumple que .
Junta Externa
La junta externa evita perder tuplas que no pueden ser combinadas con ningún elemento de la otra tabla. Existen tres tipos de tuplas externas:
- Junta externa izquierda:
- Junta externa derecha:
- Junta externa completa:
Dadas dos relaciones y una condición, la junta externa entre selecciona del producto cartesiano las tupas que cumplen la condición, y añade:
- En la junta externa izquierda, todas las tuplas de que no aparecen en la proyección de los atributos de en el resultado final.
- En la junta externa derecha, todas las tuplas de que no aparecen en la proyección de los atributos de en el resultado final.
- En la junta externa completa, todas las tuplas de o de que no aparecen en la proyección de los atributos de o de respectivamente en el resultado final.
Conjuntos Completos de Operadores
Hemos definido una serie de operaciones básicas del álgebra relacional, pero existen subconjuntos de ellos que tienen la misma capacidad de expresión que todo el conjunto. A dichos subconjuntos se los denomina conjuntos completos de operadores
Los siguientes operadores forman un conjunto completo:
Para demostrarlo, debemos mostrar que el resto de operadores se puede construir a partir de estos seis. Por ejemplo, la intersección: