W algebrze relacyjnej najpierw przedstawimy nieformalną definicję lewego (zewnętrznego) złączenia i przejdziemy do udowodnienia, że to zmiana nazwy, selekcji, łączenia i rzutowania może tworzyć różnicę, a także, że różnicę, selekcję i łączenie można wykorzystać do zbudowania różnicy lewe (zewnętrzne) połączenie. W rzeczywistości skończymy w odwrotnej kolejności: pokażemy, jak konstruować lewe złączenia za pomocą różnic, a następnie pokażemy, jak konstruować różnice za pomocą lewych złączeń.
Niech i mają odpowiednio schematy i , gdzie i są zestawami atrybutów w jednym schemacie, ale nie drugim, a jest zbiorem wspólnych atrybutów.RS(R′,T)(T,S′)R′S′T
Niech będzie krotką zerową dla schematu . Oznacza to, że jest to krotka składająca się ze wszystkich wartości zerowych dla każdego atrybutu . Następnie definiujemy lewe łączenie zewnętrzne w następujący sposób: jest zbiorem wszystkich krotek należących do schematu gdzie ...w=(ϵ,ϵ,...,ϵ)S′S′R LEFT JOIN S
(r,t,s)(R′,T,S′)
- (r,t) oznacza krotkę w ;R
- (a) oznacza krotkę S lub (b) s = w ;(t,s)Ss=w
- Jeśli jest w zestawie dla s ≠ w , to ( r , t , w ) nie jest w zestawie.(r,t,s)s≠w(r,t,w)
Przykład: schemat to ( A 1 , A 2 , A 3 ) , schemat S to ( A 2 , A 3 , A 4 ) , a my mamy ten R = { ( 1 , 2 , 3 ) , ( 4 , 5 , 6 ) } i S = { ( 2 , 3 , 4 )R(A1,A2,A3)S(A2,A3,A4)R={(1,2,3),(4,5,6)} . Przez (1) i (2) otrzymujemy wynik pośredni { ( 1 , 2 , 3 , 4 ) , ( 1 , 2 , 3 , 6 ) , ( 1 , 2 , 3 , ϵ ) , ( 4 , 5 , 6 , ϵ ) } . Do (3) musimy usunąć ( 1 , 2S={(2,3,4),(2,3,6)}{(1,2,3,4),(1,2,3,6),(1,2,3,ϵ),(4,5,6,ϵ)} , ponieważ mamy (na przykład), ( 1 , 2 , 3 , 4 ) , a y = 4 ≠ ε = wag . Pozostaje nam zatem { ( 1 , 2 , 3 , 4 ) , ( 1 , 2 , 3 , 6 ) , ( 4 , 5 , 6 , ϵ ) }(1,2,3,ϵ)(1,2,3,4)s=4≠ϵ=w{(1,2,3,4),(1,2,3,6),(4,5,6,ϵ)}, oczekiwany wynik dla lewego złączenia.
Twierdzenie: R LEFT JOIN S
jest równoważne z (R EQUIJOIN S) UNION ((((PROJECT_T R) DIFFERENCE (PROJECT_T S)) EQUIJOIN R) JOIN w)
.
Dowód: (R EQUIJOIN S)
daje nam wszystko, czego wymagają (1) i (2a). Twierdzimy, że ((((PROJECT_T R) DIFFERENCE (PROJECT_T S)) EQUIJOIN R) JOIN w)
daje nam to wszystko w formie (r, t, w)
wymaganej przez (2b) i (3).
To zobaczyć pierwszy uwagę, że (((PROJECT_T R) DIFFERENCE (PROJECT_T S)) EQUIJOIN R)
jest to zbiór wszystkich krotki w , dla którego nie ma odpowiadającej krotka w S . Aby to zobaczyć, wystarczy zauważyć, że rzutując wspólne atrybuty z R i S (zestaw atrybutów T ) i biorąc pod uwagę różnicę, pozostaje jeden i wszystkie krotki (ze schematem T ), które są reprezentowane w R, ale nie S . Przez z R odzyskujemy wszystkie i tylko te krotki w R, które mają wartości atrybutów w T, które są obecne w R, ale nie w SRSRSTTRSEQUIJOIN
RRTRS; a mianowicie dokładnie zestaw krotek, które do tej pory twierdziliśmy.
Następnie zauważ, że schemat (((PROJECT_T R) DIFFERENCE (PROJECT_T S))
jest taki sam jak dla (mianowicie ( R ' , T ) ), podczas gdy schemat w jest S ' . Działanie jest zatem iloczyn, że możemy uzyskać wszystkie krotki postaci ( R , T , W ), w których nie ma ( t , y ) w S odpowiadającego ( r , t ) w R .R(R′,T)wS′JOIN
(r,t,w)(t,s)S(r,t)R
Aby zobaczyć, że jest to dokładnie zestaw krotek, które musieliśmy dodać R EQUIJOIN S
w celu skonstruowania R LEFT JOIN S
, rozważ następujące kwestie: z uwagi na konstrukcję (3) jest spełniony, ponieważ R EQUIJOIN S
nie może zawierać jeśli zawiera ( r , t , w ) (gdyby tak się stało, wówczas druga część zawierająca ( r , t , w ) byłaby sprzecznością); jeśli było dodać kolejną ( r , T , W ) nie , to nie będzie to ((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)
w S odpowiadające ( r , t ) w R , a według definicji, ( r , t , s ) również byłoby wsprzeczności (3). To kończy dowód.(t,s)S(r,t)REQUIJOIN
(r,t,s)R LEFT JOIN S
Teraz pokazujemy, że lewe łączenie może być użyte do skonstruowania różnicy:
Twierdzenie: R DIFFERENCE S
jest równoważne zPROJECT_T(SELECT_{t'=w}(R LEFT JOIN (SELECT_{s=s'}(((S JOIN RENAME_{T->T'}(S)))))))
Dowód: zauważ, że tutaj i S ′ są puste, ponieważ wszystkie atrybuty są wspólne, aby miały sens. Najpierw tworzymy nową relację z S poprzez duplikowanie zestawu atrybutów w S (obsługiwane przez i ), tak aby zawierała krotki ( t , t ′ ) w zestawie atrybutów ( T , T ′ ), gdzie t = t ′ (obsługiwane przez ). Lewe złączenie pozostawia nam krotki formy ( t , t ′ )R′S′DIFFERENCE
SSRENAME
JOIN
(t,t′)(T,T′)t=t′SELECT
(t,t′)gdzie lub t ′ = w . Teraz, aby pozbyć się wpisów, które również pojawiają się w S , musimy zachować tylko krotki formy ( t , w ) , która jest obsługiwana przez najbardziej zewnętrzne . Ostatnim pozbywa tymczasowego zestawu atrybutów T ' i pozostawia nas z różnicy pod względem pierwotnego schematu.t=t′t′=wS(t,w)SELECT
PROJECT
T′
R={(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)}