Álgebra Relacional
El Álgebra Relacional es un lenguaje formal y matemático de tipo procedural propuesto por Edgar F. Codd que define las operaciones teóricas para manipular relaciones (tablas) y obtener nuevas relaciones como resultado. Es el fundamento teórico directo sobre el que se diseñan los motores de bases de datos relacionales y el lenguaje SQL.
1. Naturaleza y Principio de Clausura #
En el álgebra relacional:
- Entrada: Una o dos relaciones (tablas).
- Salida: Siempre una nueva relación (tabla).
NOTE
Principio de Clausura: Como el resultado de cualquier operación algebraica es siempre una nueva relación, las operaciones pueden anidarse y combinarse indefinidamente para construir consultas complejas.
2. Operaciones Unarias (Operan sobre 1 sola relación) #
A. Selección ( - Sigma) #
Filtra y devuelve las filas (tuplas) que cumplen una condición o predicado lógico.
- Equivalente en SQL: Cláusula
WHERE. - Ejemplo: Obtener los empleados con salario superior a 2.000 €:
1SELECT * FROM EMPLEADOS WHERE salario > 2000;
B. Proyección ( - Pi) #
Selecciona un subconjunto de columnas (atributos) de la relación, eliminando automáticamente las filas duplicadas resultantes.
- Equivalente en SQL: Cláusula
SELECT DISTINCT columna1, columna2. - Ejemplo: Obtener solo el nombre y correo de todos los clientes:
1SELECT DISTINCT nombre, email FROM CLIENTES;
C. Renombramiento ( - Rho) #
Asigna un nuevo nombre a una relación o a sus atributos para evitar ambigüedades en operaciones compuestas.
- Equivalente en SQL: Cláusula
AS.
3. Operaciones de Conjuntos (Exigen Compatibilidad de Unión) #
Para poder aplicar estas operaciones, ambas relaciones y deben ser compatibles de unión: deben tener el mismo número de atributos y dominios compatibles en el mismo orden.
A. Unión () #
Devuelve todas las tuplas que pertenecen a , a o a ambas (sin duplicados).
- Equivalente en SQL:
UNION.
B. Intersección () #
Devuelve únicamente las tuplas que están presentes simultáneamente tanto en como en .
- Equivalente en SQL:
INTERSECT.
C. Diferencia () #
Devuelve las tuplas que están en pero no están en .
- Equivalente en SQL:
EXCEPT(oMINUSen Oracle).
4. Operaciones Binarias Combinadas #
A. Producto Cartesiano () #
Combina cada fila de con todas y cada una de las filas de .
- Si tiene filas y tiene filas, el resultado tiene filas.
- Equivalente en SQL:
CROSS JOIN(oFROM R, S).
B. Reunión Natural / Natural Join () #
Une las tuplas de y que coinciden en los valores de todos los atributos que tienen el mismo nombre en ambas tablas, eliminando las columnas duplicadas.
- Ejemplo: Unir clientes con sus pedidos por
id_cliente:
1SELECT * FROM CLIENTES NATURAL JOIN PEDIDOS;
C. Theta-Join () #
Laboratorio: coincidencias y filas sin pareja #
Compara JOIN internos y externos con datos locales. Cambia el filtro entre ON y WHERE para comprobar cómo afecta a las filas con NULL.
Laboratorio interactivo
JOIN: qué filas sobreviven
Combina clientes y pedidos, incluyendo un cliente sin pedidos y un pedido sin cliente. Compara los resultados y la posición del filtro. Todos los datos son locales.
Clientes · 3 filas
| id | nombre |
|---|---|
| 1 | Ana |
| 2 | Luis |
| 3 | Eva |
Pedidos · 4 filas
| id | cliente | importe |
|---|---|---|
| 101 | 1 | 20 |
| 102 | 1 | 60 |
| 103 | 2 | 30 |
| 104 | 99 | 10 |
SELECT c.nombre, p.id, p.importe FROM clientes c LEFT JOIN pedidos p ON c.id = p.cliente AND p.importe >= 0;
Resultado del JOIN · 4 filas
| cliente | pedido | importe |
|---|---|---|
| Ana | 101 | 20 |
| Ana | 102 | 60 |
| Luis | 103 | 30 |
| Eva | NULL | NULL |
4 filas: 1 sin pareja completa.
NULL no supera un filtro numérico en WHERE. Las filas repetidas por varias coincidencias se conservan, como en SQL sin DISTINCT. El pedido 104 sin cliente es intencionado: este conjunto no tiene una FK validada. FULL JOIN es conceptual; no todos los motores lo implementan directamente.
Experimenta: Con LEFT JOIN e importe mínimo 40 compara ON y WHERE: ON conserva a Luis y Eva con NULL; WHERE elimina esas filas. Con FULL JOIN comprueba también los pedidos sin coincidencia.
Es un producto cartesiano seguido de una selección con una condición de comparación arbitraria (usando ).
- Equivalente en SQL:
INNER JOIN ... ON condición. - Ejemplo:
1SELECT * 2FROM EMPLEADOS 3INNER JOIN DEPARTAMENTOS ON EMPLEADOS.id_depto = DEPARTAMENTOS.id_depto;
D. División () #
Responde a consultas que expresan la condición universal «todos» o «cada uno de».
- Ejemplo: Encontrar los números de cliente que han comprado todos los productos del catálogo.
5. Tabla de Equivalencias entre Álgebra Relacional y SQL #
| Operación Álgebra Relacional | Símbolo | Cláusula / Comando SQL |
|---|---|---|
| Selección | SELECT * FROM R WHERE condición | |
| Proyección | SELECT DISTINCT col1, col2 FROM R | |
| Renombramiento | SELECT col AS nuevo_nombre FROM R AS S | |
| Unión | SELECT * FROM R UNION SELECT * FROM S | |
| Intersección | SELECT * FROM R INTERSECT SELECT * FROM S | |
| Diferencia | SELECT * FROM R EXCEPT SELECT * FROM S | |
| Producto Cartesiano | SELECT * FROM R CROSS JOIN S | |
| Theta-Join | SELECT * FROM R INNER JOIN S ON condición | |
| Reunión Natural | SELECT * FROM R NATURAL JOIN S |
Resumen del tema
Conceptos clave #
- Principio de clausura: toda operación sobre relaciones produce siempre una nueva relación como resultado.
- Operaciones unarias: filtra filas por condición y selecciona columnas sin duplicados.
- Compatibilidad de unión: requisito indispensable para , y (mismo número de atributos y tipos compatibles).
- Joins: el producto cartesiano () combina todo con todo; el Theta-Join () filtra por condición y el Natural Join () empareja por columnas con idéntico nombre.
- Base de SQL: los optimizadores de consultas de los motores RDBMS traducen sentencias SQL a árboles de expresiones de álgebra relacional para ejecutar planes eficientes.
Qué debes recordar #
La Selección () filtra filas (WHERE), la Proyección () extrae columnas (SELECT DISTINCT) y el Join () cruza relaciones vinculando claves (INNER JOIN ON).