Tengo problemas para entender el álgebra relacional cuando se trata de uniones theta, equijoins y uniones naturales. ¿Podría alguien ayudarme a entenderlo mejor? ¿Si utilizo el signo = en un theta join es exactamente lo mismo que utilizar un natural join?
Una theta join permite relaciones de comparación arbitrarias (como ≥).
Un equijoin es un theta join que utiliza el operador de igualdad.
Un natural join es un equijoin sobre atributos que tienen el mismo nombre en cada relación.
Además, un join natural elimina las columnas duplicadas implicadas en la comparación de igualdad, de modo que sólo queda 1 de cada columna comparada; en términos algebraicos relacionales aproximados:
⋈ = πR,S-as ○ ⋈aR=aS
</código>
La respuesta de @outis'es buena: concisa y correcta en cuanto a las relaciones.
Sin embargo, la situación es algo más complicada en lo que respecta a SQL.
Consideremos la habitual base de datos de proveedores y piezas pero implementada en SQL:
SELECT * FROM S NATURAL JOIN SP;
devolvería un conjunto de resultados** con las columnas
SNO, SNAME, STATUS, CITY, PNO, QTY
La unión se realiza en la columna con el mismo nombre en ambas tablas, SNO
. Observe que el conjunto de resultados tiene seis columnas y sólo contiene una columna para SNO
.
Consideremos ahora un eqijoin theta, en el que los nombres de columna para la unión deben especificarse explícitamente (además, se requieren las variables de rango S
y SP
):
SELECT * FROM S JOIN SP ON S.SNO = SP.SNO;
El conjunto de resultados tendrá siete columnas, incluidas dos columnas para SNO
. Los nombres del conjunto de resultados son lo que el estándar SQL denomina "dependientes de la implementación", pero podrían tener el siguiente aspecto:
SNO, SNAME, STATUS, CITY, SNO, PNO, QTY
.
o tal vez así
S.SNO, SNAME, STATUS, CITY, SP.SNO, PNO, QTY
En otras palabras, se puede considerar que NATURAL JOIN
en SQL elimina las columnas con nombres duplicados del conjunto de resultados (pero, por desgracia, no eliminará las filas duplicadas - debe acordarse de cambiar SELECT
a SELECT DISTINCT
usted mismo).
* No sé muy bien cuál es el resultado de `SELECT FROM tabla_expresion;`. Sé que no es una relación porque, entre otras razones, puede tener columnas con nombres duplicados o una columna sin nombre. Sé que no es un conjunto porque, entre otras razones, el orden de las columnas es significativo. Ni siquiera es una tabla SQL o una expresión de tabla SQL. Yo lo llamo conjunto de resultados.
Natural es un subconjunto de Equi, que a su vez es un subconjunto de Theta.
Si utilizo el signo = en una unión theta, ¿es exactamente lo mismo que utilizar una unión natural? usando una unión natural?
No necesariamente, pero sería un Equi. Natural significa que está coincidiendo en todas las columnas con nombres similares, Equi sólo significa que está utilizando '=' exclusivamente (y no 'menos que', como, etc)
Aunque esto es puramente académico, podrías trabajar con bases de datos relacionales durante años y nunca oir a nadie utilizar estos términos.