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