Este grupo de especialistas pasados algunos días de investigación y de juntar de información, dimos con los datos necesarios, deseamos que te resulte útil en tu trabajo.
Solución:
Dejando SQL a un lado por un momento …
Un operador relacional toma una o más relaciones como parámetros y da como resultado una relación. Porque una relación no tiene attributes con nombres duplicados por definición, las operaciones relacionales theta join y natural join “eliminarán el duplicado attributes. ” [A big problem with posting examples in SQL to explain relation operations, as you requested, is that the result of a SQL query is not a relation because, among other sins, it can have duplicate rows and/or columns.]
La operación del producto cartesiano relacional (da como resultado una relación) difiere del producto cartesiano conjunto (da como resultado un conjunto de pares). La palabra ‘cartesiano’ no es particularmente útil aquí. De hecho, Codd llamó a su operador primitivo “producto”.
El verdadero lenguaje relacional Tutorial D carece de un operador de producto y el producto no es un operador primitivo en el álgebra relacional propuesto por el coautor del Tutorial D, Hugh Darwen **. Esto se debe a que la unión natural de dos relaciones sin attribute Los nombres en común dan como resultado la misma relación que el producto de las mismas dos relaciones, es decir, la unión natural es más general y, por lo tanto, más útil.
Considere estos ejemplos (Tutorial D):
WITH RELATION TUPLE Y 1 , TUPLE Y 2 , TUPLE Y 3 AS R1 ,
RELATION TUPLE X 1 , TUPLE X 2 AS R2 :
R1 JOIN R2
devuelve el producto de las relaciones, es decir, el grado de dos (es decir, dos attributes, X
y Y
) y cardinalidad de 6 (2 x 3 = 6 tuplas).
Sin embargo,
WITH RELATION TUPLE Y 1 , TUPLE Y 2 , TUPLE Y 3 AS R1 ,
RELATION TUPLE Y 1 , TUPLE Y 2 AS R2 :
R1 JOIN R2
devuelve la unión natural de las relaciones, es decir, el grado de uno (es decir, la unión del conjunto del attributes ceder uno attribute Y
) y cardinalidad de 2 (es decir, tuplas duplicadas eliminadas).
Espero que los ejemplos anteriores expliquen por qué su afirmación “que un conjunto de 13 X un conjunto de 4 = 52” no es estrictamente correcta.
De manera similar, el Tutorial D no incluye un operador de combinación theta. Esto se debe esencialmente a que otros operadores (por ejemplo, unión natural y restricción) lo hacen innecesario y no terriblemente útil. En contraste, los operadores primitivos de Codd incluían producto y restricción que se pueden usar para realizar una unión theta.
SQL tiene un operador de producto explícito llamado CROSS JOIN
lo que obliga a que el resultado sea el producto incluso si implica violar 1NF al crear columnas duplicadas (attributes). Considere el SQL equivalente al último ejemplo de Tutoral D anterior:
WITH R1 AS (SELECT * FROM (VALUES (1), (2), (3)) AS T (Y)),
R2 AS (SELECT * FROM (VALUES (1), (2)) AS T (Y))
SELECT *
FROM R1 CROSS JOIN R2;
Esto devuelve una expresión de tabla con dos columnas (en lugar de una attribute) ambos llamados Y
(!!) y 6 filas, es decir, esto
SELECT c1 AS Y, c2 AS Y
FROM (VALUES (1, 1),
(2, 1),
(3, 1),
(1, 2),
(2, 2),
(3, 2)
) AS T (c1, c2);
** Es decir, aunque solo hay un modelo relacional (es decir, Codd), puede haber más de un álgebra relacional (es decir, Codd es solo uno).
No tiene toda la razón: una combinación theta es una combinación que puede incluir una condición otro que =
– en SQL, normalmente <
o >=
etc. Ver TechNet
En cuanto al producto cartesiano (o CROSS JOIN
), es una operación más que una idea o un concepto. ¡Es importante porque a veces necesitas usarlo! Es un hecho básico que set of 13 x set of 4 = 52
, y el producto cartesiano se basa en este hecho.
En mi opinión, para hacerlo simple, si entiende equijoin, supone que debería entender theta join. Si cambia el símbolo = (igual) en equijoin a> =, entonces ya hizo theta join. Sin embargo, creo que es bastante difícil ver la practicidad de usar theta join en comparación con equijoin, ya que la causa de combinación que usamos normalmente es V.primarykey = C.foreignkey. Y si desea cambiar a theta join, entonces puede depender del valor, como tal, está haciendo la selección.
Para la unión natural, es similar a equijoin, la diferencia es solo que se deshace de la redundancia attributes. ¡fácil!:)
Espero que esta explicación ayude.
Te mostramos reseñas y valoraciones
Si te apasiona este mundo, tienes la libertad de dejar una reseña acerca de qué le añadirías a este tutorial.