Las bases de datos relacionales trabajan con ideas de conjuntos: tablas, filas, consultas, filtros, uniones, intersecciones, diferencias y relaciones entre entidades.
Las bases de datos relacionales están profundamente conectadas con la teoría de conjuntos. Una tabla puede verse como un conjunto de filas, una consulta como una operación que produce otro conjunto de filas, y una relación entre tablas como una asociación entre conjuntos.
SQL incluye operaciones que se parecen directamente a unión, intersección, diferencia, producto cartesiano y selección por propiedades.
Una tabla representa una colección de registros. Conceptualmente, cada fila puede verse como una tupla.
En la práctica, SQL puede permitir duplicados en algunos resultados, pero el modelo relacional clásico trabaja con la idea de conjuntos de tuplas.
Una consulta con WHERE selecciona filas que cumplen una propiedad. Esto equivale a construir un subconjunto.
El resultado es el subconjunto de usuarios activos.
Seleccionar columnas específicas se relaciona con proyectar tuplas sobre algunas de sus componentes.
La consulta toma cada fila y conserva solo el campo nombre.
UNION combina resultados de dos consultas y elimina duplicados.
El resultado contiene correos que aparecen en clientes, proveedores o ambos.
UNION ALL también combina resultados, pero conserva duplicados.
Esto se comporta más como concatenación de listas que como unión matemática estricta.
INTERSECT obtiene filas que aparecen en ambos resultados.
El resultado contiene correos que están tanto en clientes como en suscriptores.
EXCEPT obtiene filas que aparecen en el primer resultado y no en el segundo.
El resultado contiene clientes que no están bloqueados.
Un producto cartesiano entre tablas combina cada fila de una tabla con cada fila de otra.
Si hay 3 talles y 2 colores, el resultado tiene 6 combinaciones.
Un JOIN combina filas de dos tablas según una condición. Puede verse como una selección sobre el producto cartesiano.
La condición del ON determina qué pares de filas forman parte del resultado.
Un INNER JOIN devuelve solo las filas que tienen coincidencia en ambas tablas según la condición.
Conceptualmente, trabaja con elementos relacionados en ambos conjuntos de datos.
Un LEFT JOIN conserva todas las filas de la tabla izquierda y agrega datos de la derecha cuando hay coincidencia.
Es útil para encontrar elementos sin relación, por ejemplo usuarios sin pedidos.
Para detectar usuarios sin pedidos, se puede usar LEFT JOIN y filtrar los nulos.
Esta consulta equivale a buscar elementos de un conjunto que no aparecen relacionados con otro.
DISTINCT elimina duplicados del resultado.
El resultado se comporta como un conjunto de categorías únicas.
| Teoría de conjuntos | SQL | Idea |
|---|---|---|
| Subconjunto por propiedad | WHERE | Filtrar filas |
| Unión | UNION | Combinar resultados sin duplicados |
| Intersección | INTERSECT | Filas comunes |
| Diferencia | EXCEPT | Filas del primer resultado que no están en el segundo |
| Producto cartesiano | CROSS JOIN | Todas las combinaciones |
| Relación | JOIN ON | Combinar filas relacionadas |
Podemos representar resultados de consultas como conjuntos y aplicar operaciones similares.
const clientes = new Set(["ana@correo.com", "luis@correo.com"]);
const suscriptores = new Set(["luis@correo.com", "carla@correo.com"]);
function union(a, b) {
return new Set([...a, ...b]);
}
function interseccion(a, b) {
return new Set([...a].filter(elemento => b.has(elemento)));
}
function diferencia(a, b) {
return new Set([...a].filter(elemento => !b.has(elemento)));
}
console.log([...union(clientes, suscriptores)]);
console.log([...interseccion(clientes, suscriptores)]);
console.log([...diferencia(clientes, suscriptores)]);
Las bases de datos relacionales y SQL aplican constantemente ideas de teoría de conjuntos. Comprender estas conexiones permite escribir consultas más claras, evitar errores y razonar mejor sobre los resultados.
En el próximo tema estudiaremos aplicaciones de conjuntos en teoría de grafos.