Joins in SQL und Sybase ASA

Werbung
Joins in SQL und Sybase ASA
Technologie Memo
25. Juni 2005
 Dr. Arno Schmidhauser
Inhalt
1
Natural Join
1.1 SQL-Standard
1.2 Sybase ASA
2 Natural Left Outer Join
2.1 SQL-Standard
2.2 Sybase ASA
2
2
2
3
3
3
Join-Bildung, SQL Standard und Sybase ASA
1 Natural Join
1.1 SQL-Standard
Der natural join ist kommutativ, das heisst:
A natural join B = B natural join
A
Der natural join ist assoziativ, das heisst:
(A natural join B) natural join C
=
A natural join (B natural join C)
Dabei ist zu beachten, dass wenn zwei Tabellen A und B, respektive B und
C, keine gemeinsamen Attribute haben, der natural join gemäss Relationenalgebra zu einem Kreuzprodukt wird (Auch Cross Join oder Kartesisches Produkt genannt).
1.2 Sybase ASA
Das Verhalten bei Sybase ASA weicht von obigem Verhalten ab:
Nachbarschaftsregel:
Der Ausdruck
A natural join B natural join C
wird so ausgewertet, dass jeweils zwischen zwei benachbarten Tabellen
die gemeinsamen Attribute gesucht werden und diese intern zu einer JoinBedingung der Art
where A.ab = B.ab
and B.bc = C.bc
and ... weitere Bedingungen ...
verarbeitet werden.
Klammerungen werden dabei syntaktisch ignoriert. Die Nachbarschaftsregel führt zu Schwierigkeiten, wenn beispielsweise folgender Join gebildet
werden soll:
A natural join B natural join C natural join D
wobei nur A je ein gemeinsames Attribut mit B, C und D hat, jedoch keine
gemeinsamen Attribute zwischen B und C, C und D bestehen.
Technologie Memo
Arno Schmidhauser
2
Join-Bildung, SQL Standard und Sybase ASA
Sybase hat für diesen Fall eine besondere Syntax eingeführt:
A natural join ( B, C, D )
Bezüglich Syntax ist bei Sybase unbedingt zu beachten: natural join
und join sind nicht synonym, im Gegensatz zur Definition im SQLStandard. Der join bezieht sich auf eine Verknüpfung über Attribute, die
mit einem foreign key constraint zwischen zwei Tabellen definiert
sind. Der natural join hingegen bezieht sich auf gemeinsame, gleich
lautende Attribute.
Ausserdem gilt für Sybase: Haben die zwei Tabellen-Ausdrücke links und
rechts vom join-Operator keine gemeinsamen Attribute, wird ein Fehler
ausgegeben.
2 Natural Left Outer Join
2.1 SQL-Standard
Der natural left outer join (nloj) ist offensichtlicherweise nicht kommutativ, das heisst:
A nloj B
≠
B nloj A
Der natural left outer join ist assoziativ, das heisst:
(A nloj B) nloj C
=
A nloj (B nloj C)
Gemischte Ausdrücke mit natural join und natural left outer join sind im
allgemeinen weder assoziativ noch kommutativ. Es gilt daher:
(A nloj B)
nj C
≠
A nloj ( B nj C )
!!!
2.2 Sybase ASA
Nachbarschaftsregel:
Der Ausdruck
A natural left outer join B natural left outer join C
wird so ausgewertet, dass jeweils zwischen zwei benachbarten Tabellen
die gemeinsamen Attribute gesucht werden und aufgrund dieser die Ou-
Technologie Memo
Arno Schmidhauser
3
Join-Bildung, SQL Standard und Sybase ASA
ter-Join Bedingung zusammengestellt wird. Klammerungen werden, syntaktisch gesehen, ignoriert.
Die Durchführung erfolgt von links nach rechts, wenn keine Klammern angegeben werden, ansonsten entsprechend der Klammerung.
3 Gemischte Ausdrücke mit Inner und Outer Join
Gemischte Ausdrücke von inner join und outer join werden nach der Nachbarschaftsregel syntaktisch analysiert, die Durchführung findet jedoch von
links nach rechts statt, wenn keine Klammerung verwendet wurde, ansonsten entsprechend der Klammerung. Der Klarheit halber ist also wenn
möglich eine Klammerung mitzugeben. Beispiel:
A nloj B nj C
präziser schreiben als
(A nloj B) nj C
oder wenn andere Reienfolge gewünscht als
A nloj (B nj C)
Achtung: Der Ausdruck
(A nloj B) nj C
ist sinnlos, weil er dasselbe ergibt wie
(A nj B) nj C
Der Effekt des Outer Joins wird durch den nachfolgenden Inner Join zunichte gemacht: Die Datensätze mit den aufgefüllten Nullwerten gehen
beim Inner Join wieder verloren:
Technologie Memo
Arno Schmidhauser
4
Join-Bildung, SQL Standard und Sybase ASA
( A nloj B ) nj C
A
B
ka
1
2
a1
A1
A2
ka
1
ka
1
2
X = A nloj B
a1
ka
A1
1
A2
null
ka
1
a1
A1
C
kc
1
kc
1
2
c1
C1
C2
kc
1
null
X nj C
ka
1
kc
1
kc
1
c1
C1
für den Inner Join wird ja kc in der Tabelle X mit kc in der Tabelle C
verglichen. Ist kc in einem Fall gleich null, so ist der Vergleich ebenfalls
null (für die Bedingungen wird null wie false behandelt) und der entsprechende Datensatz fällt aus dem Resultat.
Technologie Memo
Arno Schmidhauser
5
Herunterladen