Tengo problemas para entender el álgebra relacional cuando se trata de uniones theta, equijoin y uniones naturales. ¿Podría alguien ayudarme a entenderlo mejor? Si uso el signo = en una combinación theta, ¿es exactamente lo mismo que usar una combinación natural?
sql
database
relational-database
relational-algebra
macluniano
fuente
fuente
Respuestas:
Una unión theta permite relaciones de comparación arbitrarias (como ≥).
Una equijoin es una combinación theta que usa el operador de igualdad.
Una combinación natural es una combinación de atributos que tienen el mismo nombre en cada relación.
Además, una combinación natural elimina las columnas duplicadas involucradas en la comparación de igualdad, por lo que solo queda 1 de cada columna comparada; en términos algebraicos relacionales aproximados:
⋈ = πR,S-as ○ ⋈aR=aS
fuente
theta
combinación in theta se refiere a una condición arbitraria utilizada como criterio para la combinación. (ver Sistemas de bases de datos: El libro completo de García-Molina, Ullman, Widom, capítulo 2, Theta Join)Si bien las respuestas que explican las diferencias exactas están bien, quiero mostrar cómo el álgebra relacional se transforma en SQL y cuál es el valor real de los 3 conceptos.
El concepto clave en su pregunta es la idea de una combinación. Para comprender una combinación, debe comprender un producto cartesiano (el ejemplo se basa en SQL, donde el equivalente se denomina combinación cruzada, como señala onedaywhen);
Esto no es muy útil en la práctica. Considere este ejemplo.
El producto cartesiano Producto x Componente será - abajo o violín sql . Puede ver que hay 12 filas = 3 x 4. Obviamente, las filas como "Laptop" con "ruedas" no tienen significado, por eso en la práctica el producto cartesiano se usa raramente.
Los JOIN están aquí para agregar más valor a estos productos. Lo que realmente queremos es "unir" el producto con sus componentes asociados, porque cada componente pertenece a un producto. La forma de hacer esto es con una combinación:
La consulta SQL asociada sería así (puedes jugar con todos los ejemplos aquí )
y el resultado:
Observe que el resultado tiene solo 4 filas, porque la computadora portátil tiene 3 componentes, el automóvil tiene 1 y el avión ninguno. Esto es mucho más útil.
Volviendo a sus preguntas, todas las uniones sobre las que pregunta son variaciones del JOIN que acabo de mostrar:
Unión natural = la combinación (la cláusula ON) se realiza en todas las columnas con el mismo nombre; elimina las columnas duplicadas del resultado, a diferencia de todas las demás combinaciones; la mayoría de los DBMS (sistemas de bases de datos creados por varios proveedores, como SQL Server de Microsoft, MySQL de Oracle, etc.) ni siquiera se molestan en admitir esto, es solo una mala práctica (o decidieron no implementarlo a propósito). Imagine que llega un desarrollador y cambia el nombre de la segunda columna en Producto de Precio a Costo. Luego, todas las uniones naturales se realizarían en PName Y en Cost, lo que daría como resultado 0 filas ya que ningún número coincide.
Theta Join = esta es la combinación general que todos usan porque le permite especificar la condición (la cláusula ON en SQL). Puede unirse en prácticamente cualquier condición que desee, por ejemplo, en Productos que tienen las 2 primeras letras similares o que tienen un precio diferente. En la práctica, este rara vez es el caso: en el 95% de los casos, se unirá en una condición de igualdad, lo que nos lleva a:
Equi Join = el más común utilizado en la práctica. El ejemplo anterior es una combinación equi. ¡Las bases de datos están optimizadas para este tipo de uniones! Lo contrario de una combinación equi es una combinación no equi, es decir, cuando se une en una condición distinta de "=". ¡Las bases de datos no están optimizadas para esto! Ambos son subconjuntos de la combinación theta general. La combinación natural también es una combinación theta, pero la condición (theta) está implícita.
Fuente de información: universidad + desarrollador certificado de SQL Server + recientemente completó el MOO "Introducción a las bases de datos" de Stanford, así que me atrevo a decir que tengo el álgebra relacional fresca en mente.
fuente
CROSS JOIN
operación en SQL da como resultado una expresión de tabla (filas de columnas). La operación de conjunto producto cartesiano da como resultado un conjunto de pares.SELECT * FROM...
(y tal vez lo haga). Pero está en el lenguaje, está en cada implementación de SQL y lo uso a menudo (¡y apuesto a que usted también lo hace!). Pista que no todo el código es código de producción.La respuesta de @outis es buena: concisa y correcta en cuanto a relaciones.
Sin embargo, la situación es un poco más complicada en cuanto a SQL.
Considere los proveedores habituales y la base de datos de piezas pero implementada en SQL:
devolvería un conjunto de resultados ** con columnas
SNO, SNAME, STATUS, CITY, PNO, QTY
La unión se realiza en la columna con el mismo nombre en ambas tablas,
SNO
. Tenga en cuenta que el conjunto de resultados tiene seis columnas y solo contiene una columna paraSNO
.Ahora considere una ecuación theta, donde los nombres de columna para la unión deben especificarse explícitamente (más las variables de rango
S
ySP
son obligatorias):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 "dependiente de la implementación", pero podrían verse así:SNO, SNAME, STATUS, CITY, SNO, PNO, QTY
o tal vez esto
S.SNO, SNAME, STATUS, CITY, SP.SNO, PNO, QTY
En otras palabras,
NATURAL JOIN
en SQL pueden considerarse para eliminar columnas con nombres duplicados del conjunto de resultados (pero por desgracia no eliminarán las filas duplicadas - usted debe recordar cambiarSELECT
aSELECT DISTINCT
ti mismo).** No sé muy bien cuál es el resultado
SELECT * FROM table_expression;
. 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 un conjunto de resultados.fuente
JOIN ... USING(...)
.SELECT * FROM table_expression;
" ?Natural es un subconjunto de Equi que es un subconjunto de Theta.
No necesariamente, pero sería un Equi. Natural significa que está haciendo coincidir todas las columnas con nombres similares, Equi solo significa que está usando '=' exclusivamente (y no 'menos que', como, etc.)
Sin embargo, esto es puramente académico, podría trabajar con bases de datos relacionales durante años y nunca escuchar a nadie usar estos términos.
fuente
Theta Join: cuando realiza una consulta para unirse usando cualquier operador (por ejemplo, =, <,>,> = etc.), esa consulta de unión se incluye en Theta join.
Equi Join: cuando realiza una consulta para unirse utilizando solo el operador de igualdad, esa consulta de unión se incluye en Equi join.
Ejemplo:
Nota: ¡Equi join también es una combinación theta!
Natural Join: un tipo de Equi Join que se produce implícitamente al comparar todas las columnas con los mismos nombres en ambas tablas.
Nota: aquí, el resultado de la combinación tiene solo una columna para cada par de columnas del mismo nombre.
Ejemplo
fuente
El producto cartesiano de dos tablas da todas las posibles combinaciones de tuplas, como en el ejemplo de matemáticas, el producto cruzado de dos conjuntos. ya que muchas veces hay algunos valores basura que ocupan un espacio innecesario en la memoria también, así que aquí las uniones vienen al rescate que dan la combinación de solo aquellos valores de atributo que son requeridos y son significativos.
La unión interna da el campo repetido en la tabla dos veces, mientras que la unión natural aquí resuelve el problema simplemente filtrando las columnas repetidas y mostrándolas solo una vez. De lo contrario, ambos funcionan igual. La unión natural es más eficiente ya que conserva la memoria. Además, las redundancias se eliminan en la unión natural.
La combinación equi de dos tablas es tal que solo muestran las tuplas que coinciden con el valor de otra tabla. por ejemplo: sean dos tablas new1 y new2. si la consulta sql seleccione * de new1 únase a new2 en new1.id = new.id (id es la misma columna en dos tablas) entonces comience desde la tabla new2 y únase a la que coincida con la id en la segunda tabla. además, non equi join no tienen operador de igualdad tienen <,>, y entre operador.
theta join consta de todo el operador de comparación, incluido el operador de comparación igualdad y otros <,>. cuando usa el operador de igualdad (=) se conoce como equi join.
fuente
Unión natural: la unión natural puede ser posible cuando hay al menos un atributo común en dos relaciones.
Theta Join: Theta join puede ser posible cuando dos actúan en una condición particular.
Equi Join: Equi puede ser posible cuando dos actúan en condiciones de equidad. Es un tipo de unión theta.
fuente