In der relationalen Algebra werden wir zunächst eine informelle Definition des linken (äußeren) Joins bereitstellen und anschließend nachweisen, dass durch Umbenennen, Auswählen, Verknüpfen und Projizieren Unterschiede konstruiert werden können und dass Unterschiede, Auswahlen und Vereinigungen konstruiert werden können Linke äußere Verbindung. Tatsächlich machen wir das in umgekehrter Reihenfolge: Wir zeigen, wie Links-Joins mithilfe von Differenzen erstellt werden und dann, wie Unterschiede mithilfe von Links-Joins erstellt werden.
Es sei angenommen, dass und S die Schemata ( R ' , T ) bzw. ( T , S ' ) haben, wobei R ' und S ' die Mengen von Attributen in einem Schema sind, aber nicht das andere, und T die Menge von gemeinsamen Attributen ist.RS(R′,T)(T,S′)R′S′T
Lassen Sie für Schema der Null - Tupel sein S ' . Das heißt, es ist das Tupel, das aus allen Nullwerten für jedes Attribut von S 'besteht . Dann definieren wir die linke äußere Verknüpfung wie folgt: Ist die Menge aller Tupel ( r , t , s ), die zum Schema ( R ′ , T , S ′ ) gehören, wobei ...w=(ϵ,ϵ,...,ϵ)S′S′R LEFT JOIN S
( r , t , s )( R′, T, S′)
- ist ein Tupel in R ;( r , t )R
- (a) ist ein Tupel von S oder (b) s = w ;( t , s )Ss = w
- Befindet sich in der Menge für s ≠ w , dann befindet sich ( r , t , w ) nicht in der Menge.( r , t , s )s ≠ w( r , t , w )
Beispiel: Das Schema von ist ( A 1 , A 2 , A 3 ) , das Schema von S ist ( A 2 , A 3 , A 4 ) , und wir haben das R = { ( 1 , 2 , 3 ) , ( 4 , 5 , 6 ) } und S = { ( 2 , 3 , 4 )R( A1, A2, A3)S( A2, A3, A4)R = { ( 1 , 2 , 3 ) , ( 4 , 5 , 6 ) } . Mit (1) und (2) erhalten wir das Zwischenergebnis { ( 1 , 2 , 3 , 4 ) , ( 1 , 2 , 3 , 6 ) , ( 1 , 2 , 3 , ϵ ) , ( 4 , 5 , 6 , ϵ ) } . Nach (3) müssen wir ( 1 , 2 entfernenS= { ( 2 , 3 , 4 ) , ( 2 , 3 , 6 ) }{(1,2,3,4),(1,2,3,6),(1,2,3,ϵ),(4,5,6,ϵ)} , da wir (zum Beispiel) ( 1 , 2 , 3 , 4 ) und s = 4 ≠ ϵ = w haben . Wir haben also { ( 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,ϵ)}, das erwartete Ergebnis für einen linken Join.
Satz: R LEFT JOIN S
ist äquivalent zu (R EQUIJOIN S) UNION ((((PROJECT_T R) DIFFERENCE (PROJECT_T S)) EQUIJOIN R) JOIN w)
.
Beweis: (R EQUIJOIN S)
gibt uns alles, was nach (1) und (2a) erforderlich ist. Wir behaupten, dass ((((PROJECT_T R) DIFFERENCE (PROJECT_T S)) EQUIJOIN R) JOIN w)
uns dies alles in der (r, t, w)
unter (2b) und (3) geforderten Form gibt .
Um dies zu sehen, beachten Sie zuerst, dass dies (((PROJECT_T R) DIFFERENCE (PROJECT_T S)) EQUIJOIN R)
die Menge aller Tupel in für die es in S kein entsprechendes Tupel gibt . Um das zu sehen, genügt die Feststellung, dass durch Projizieren der gemeinsamen Attribute aus R und S (der Attributmenge T ) und Differenzieren alle und nur die Tupel (mit Schema T ) übrig bleiben, die in R aber dargestellt sind nicht S . Durch das mit R gewinnen wir alle und nur die Tupel in R zurück , die Werte für Attribute in T haben, die in R aber nicht in S vorhanden sindRSRSTTRSEQUIJOIN
RRTRS; nämlich genau die Menge von Tupeln, die wir bisher behauptet haben.
Als nächstes wird bemerkt , dass das Schema (((PROJECT_T R) DIFFERENCE (PROJECT_T S))
ist das gleiche wie die von (nämlich ( R ' , T ) ), während das Schema von w ist S ' . Die Operation ist also ein kartesisches Produkt, wir erhalten alle Tupel der Form ( r , t , w ), bei denen es in S kein ( t , s ) gibt , das ( r , t ) in R entspricht .R( R′, T)wS′JOIN
( r , t , w )( t , s )S( r , t )R
Um zu sehen , dass dies genau die Menge von Tupeln wir hinzufügen benötigt R EQUIJOIN S
zu konstruieren , um R LEFT JOIN S
, Folgendes zu beachten: durch den Bau, (3) erfüllt ist , da R EQUIJOIN S
nicht enthält , wenn enthält ( r , t , w ) (wenn ja, dann wäre der zweite Teil, der ( r , t , w ) enthält , ein Widerspruch); wenn wir einen weiteren hinzuzufügen waren ( r , t , w ) nicht in , dann gäbe es ein ((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)
in S zu entsprechenden ( r , t ) in R , und durch die Definition, ( r , t , s ) wäre auch ineinem Widerspruch von (3). Damit ist der Beweis abgeschlossen.(t,s)S(r,t)REQUIJOIN
(r,t,s)R LEFT JOIN S
Nun zeigen wir, dass left join verwendet werden kann, um Unterschiede zu konstruieren:
Satz: R DIFFERENCE S
ist äquivalent zuPROJECT_T(SELECT_{t'=w}(R LEFT JOIN (SELECT_{s=s'}(((S JOIN RENAME_{T->T'}(S)))))))
Beweis: Beachten Sie, dass hier und S ' leer sind, da alle Attribute geteilt werden , um einen Sinn zu ergeben. Zunächst erstellen wir eine neue Beziehung aus S, indem wir die Attributmenge in S (behandelt von und ) so duplizieren , dass sie aus Tupeln ( t , t ' ) auf der Attributmenge ( T , T ' ) besteht, wobei t = t ' (behandelt von die ). Die linke Verknüpfung lässt uns Tupel der Form ( t , t ′ )R′S′DIFFERENCE
SSRENAME
JOIN
(t,t′)(T,T′)t=t′SELECT
(t,t′)wobei oder t ' = w ist . Um Einträge zu entfernen, die auch in S vorkommen , müssen wir nur die Tupel des Formulars ( t , w ) behalten , das vom äußersten behandelt wird . Der letzte entfernt die temporäre Attributmenge T ' und hinterlässt den Unterschied zum ursprünglichen Schema.t=t′t′=wS(t,w)SELECT
PROJECT
T′
Beispiel: Es sei und S = { ( 3 , 4 ) , ( 5 , 6 ) , ( 7 , 8 ) } . Wir erhalten zuerst S mit der d-Attributmenge T ' : { ( 3 , 4 )R={(1,2),(3,4),(5,6)}S={(3,4),(5,6),(7,8)}SRENAME
T′ . DieOperation gibt uns das kartesische Produkt mit allen neun möglichen Paarungen; Dieser Satz wird hier aus Formatierungsgründen nicht geschrieben. Diedann pares dies auf { ( 3 , 4 , 3 , 4 ) , ( 5 , 6 , 5 , 6 ) , ( 7 , 8 , 7 , 8 ) } . Diemit{(3,4),(5,6),(7,8)}JOIN
SELECT
{(3,4,3,4),(5,6,5,6),(7,8,7,8)}LEFT JOIN
ergibt { ( 1 , 2 , ϵ , ϵ ) , ( 3 , 4 , 3 , 4 ) , ( 5 , 6 , 5 , 6 ) } . Dasergibt { ( 1 , 2 , ϵ , ϵ ) } . Dasgibt { ( 1 , 2 ) } die gewünschte Antwort.R{(1,2,ϵ,ϵ),(3,4,3,4),(5,6,5,6)}SELECT
{(1,2,ϵ,ϵ)}PROJECT
{(1,2)}