En álgebra relacional, primero proporcionaremos una definición informal de unión izquierda (externa), y procederemos a demostrar que, renombrar, seleccionar, unir y proyectar puede construir la diferencia, así como esa diferencia, selección y unión pueden usarse para construir izquierda combinación externa. En realidad, terminaremos haciéndolo en el orden inverso: mostraremos cómo construir uniones izquierdas usando diferencias, y luego mostraremos cómo construir diferencias usando uniones izquierdas.
Deje que y tengan esquemas y , respectivamente, donde y son los conjuntos de atributos en un esquema pero no en el otro, y es el conjunto de atributos comunes.RS(R′,T)(T,S′)R′S′T
Sea la tupla nula para el esquema . Es decir, es la tupla que consiste en todos los valores nulos para cada atributo de . Luego, definimos la unión externa izquierda de la siguiente manera: es el conjunto de todas las tuplas pertenecen al esquema donde ...w=(ϵ,ϵ,...,ϵ)S′S′R LEFT JOIN S
(r,t,s)(R′,T,S′)
- (r,t) es una tupla en ;R
- (a) es una tupla de o (b) ;(t,s)Ss=w
- Si está en el conjunto para , entonces no está en el conjunto.(r,t,s)s≠w(r,t,w)
Ejemplo: el esquema de es , el esquema de es , y tenemos eso y . Por (1) y (2) obtenemos el resultado intermedio . Por (3) debemos eliminar , ya que tenemos (por ejemplo) yR(A1,A2,A3)S(A2,A3,A4)R={(1,2,3),(4,5,6)}S={(2,3,4),(2,3,6)}{(1,2,3,4),(1,2,3,6),(1,2,3,ϵ),(4,5,6,ϵ)}(1,2,3,ϵ)(1,2,3,4) . Por lo tanto, nos quedamos con { ( 1 , 2 , 3s=4≠ϵ=w , el resultado esperado para una unión izquierda.{ ( 1 , 2 , 3 , 4 ) , ( 1 , 2 , 3 , 6 ) , ( 4 , 5 , 6 , ϵ ) }
Teorema: R LEFT JOIN S
es equivalente a (R EQUIJOIN S) UNION ((((PROJECT_T R) DIFFERENCE (PROJECT_T S)) EQUIJOIN R) JOIN w)
.
Prueba: (R EQUIJOIN S)
nos da todo lo requerido por (1) y (2a). Afirmamos que ((((PROJECT_T R) DIFFERENCE (PROJECT_T S)) EQUIJOIN R) JOIN w)
nos da todo el formulario (r, t, w)
requerido por (2b) y (3).
Para ver esto, primero aviso de que (((PROJECT_T R) DIFFERENCE (PROJECT_T S)) EQUIJOIN R)
es el conjunto de todas las tuplas en para el que no hay ninguna tupla correspondiente en S . Para ver eso, es suficiente tener en cuenta que al proyectar los atributos comunes de R y S (el conjunto de atributos T ) y tomar la diferencia, uno queda con todas y solo aquellas tuplas (con esquema T ) que están representadas en R pero no S . Por el con R , recuperamos todas y solo aquellas tuplas en que tienen valores para atributos en que están presentes en pero no enRSRSTTRSEQUIJOIN
RRTRS; a saber, precisamente el conjunto de tuplas que hemos reclamado hasta ahora.
A continuación, observe que el esquema de (((PROJECT_T R) DIFFERENCE (PROJECT_T S))
es el mismo que el de (es decir, ), mientras que el esquema de es . El por lo tanto, la operación es un producto cartesiano, que obtenemos todas las tuplas de la forma donde no hay en que corresponde a en .R( R′, T)wS′JOIN
( r , t , w )( t , s )S( r , t )R
Para ver que este es precisamente el conjunto de tuplas que necesitamos agregar para R EQUIJOIN S
construir R LEFT JOIN S
, considere lo siguiente: por construcción, (3) se cumple, ya R EQUIJOIN S
que no puede contener si contiene (si lo hiciera, entonces la segunda parte que contiene sería una contradicción); si tuviéramos que agregar otro no esté dentro , entonces habría un en correspondiente a en , y por la definición de , también estaría en , una contradicción de (3). Esto completa la prueba.( r , t , s )((((PROJECT_T R) DIFFERENCE (PROJECT_T S)) EQUIJOIN R) JOIN w)
( r , t , w )( r , t , w )( r , t , w )((((PROJECT_T R) DIFFERENCE (PROJECT_T S)) EQUIJOIN R) JOIN w)
( t , s )S( r , t )REQUIJOIN
( r , t , s )R LEFT JOIN S
Ahora mostramos que la unión izquierda se puede usar para construir la diferencia:
Teorema: R DIFFERENCE S
es equivalente aPROJECT_T(SELECT_{t'=w}(R LEFT JOIN (SELECT_{s=s'}(((S JOIN RENAME_{T->T'}(S)))))))
Prueba: tenga en cuenta que aquí, y están vacíos, ya que todos los atributos se comparten para que tengan sentido. Primero, creamos una nueva relación a partir de duplicando el conjunto de atributos en (manejado por y ) para que conste de tuplas en el conjunto de atributos donde (manejado por el ). La unión izquierda nos deja con tuplas de la forma donde o . Ahora, para deshacernos de las entradas que también aparecen en , debemos conservar solo las tuplas del formularioR′S′DIFFERENCE
SSRENAME
JOIN
( t , t′)( T, T′)t = t′SELECT
( t , t′)t = t′t′= wS( t , w ), que es manejado por el más externo SELECT
. El último PROJECT
elimina el conjunto de atributos temporales y nos deja con la diferencia en términos del esquema original.T′
Ejemplo: Sea y . Primero obtenemos con el conjunto de atributos d : . La operación nos da el producto cartesiano con los nueve emparejamientos posibles; este conjunto no está escrito aquí por razones de formateo. La entonces pares esto a . El con da . El da . El daR = { ( 1 , 2 ) , ( 3 , 4 ) , ( 5 , 6 ) }S= { ( 3 , 4 ) , ( 5 , 6 ) , ( 7 , 8 ) }SRENAME
T′{ ( 3 , 4 ) , ( 5 , 6 ) , ( 7 , 8 ) }JOIN
SELECT
{ ( 3 , 4 , 3 , 4 ) , ( 5 , 6 , 5 , 6 ) , ( 7 , 8 , 7 , 8 ) }LEFT JOIN
R{ ( 1 , 2 , ϵ , ϵ ) , ( 3 , 4 , 3 , 4 ) , ( 5 , 6 , 5 , 6 ) }SELECT
{ ( 1 , 2 , ϵ , ϵ ) }PROJECT
{ ( 1 , 2 ) }, la respuesta deseada.