PPT

Werbung
Übung Datenbanksysteme
SQL-Anfragen (2)
18.12.2002
Übung Datenbanksysteme WS 2002/2003
08.04.2017
Outer Joins
Motivation: Aufgabe 1a
• Betrachten Sie zusätzlich den Inhalt der beiden
Einzeltabellen
• Was passiert mit Fernzug H oder Wagen 36 ?
Erklärungen:
• Im Join tauchen nur die Tupel auf, die einen Joinpartner
haben
• Fernzug H hat keine Wagen
• Wagen 36 ist keinem Zug zugeordnet
• Ist das Verhalten wünschenswert ?
• Ja, aber:
• Was ist, wenn es wichtiger ist, alle Einträge zu sehen, auch
wenn es keinen „Partner gibt“
Übung Datenbanksysteme WS 2002/2003
08.04.2017
Left outer Join
• Alle Elemente der “linken” Seite bleiben erhalten
• Elemente ohne Joinpartner werden mit NULL
aufgefüllt
• Syntax:
… from Tabelle1 t1
left (outer) join
Tabelle2 t2
on t1.spalte=t2.spalte
• “Linke” Tabelle ist t1
• Beispiel: Aufgabe 1b)
Übung Datenbanksysteme WS 2002/2003
08.04.2017
Right outer Join
• Alle Elemente der rechten Seite bleiben erhalten
• Elemente ohne Joinpartner werden mit NULL
aufgefüllt
• Syntax:
… from Tabelle1 t1
right (outer) join
Tabelle2 t2
on t1.spalte=t2.spalte
• “Rechte” Tabelle ist t2
• Beispiel: Aufgabe 1c)
Übung Datenbanksysteme WS 2002/2003
08.04.2017
Full Outer Join
Beide Seiten bleiben vollständig erhalten,
Joinpartner werden kombiniert
Elemente ohne Joinpartner werden mit NULL
aufgefüllt
• Syntax:
… from Tabelle1 t1
full outer join
Tabelle2 t2
on t1.spalte=t2.spalte
Beispiel: 1d)
Übung Datenbanksysteme WS 2002/2003
08.04.2017
Outer Joins
• Wie könnte man Outer Joins mit den „klassischen“
Statements darstellen ?
• Q1: Inner Join, um die kombinierten Tupel zu
erzeugen
• Verbleibende Tupel finden und kombinieren ?
• Q2: Projektion von Q1 auf die Attribute von t1
(Semijoin)
• Q3: Mengendifferenz t1-Q2
• Q4: Aufweitung von Q3 auf alle Spalten (wie ?)
• Union von Q1 und Q4
Übung Datenbanksysteme WS 2002/2003
08.04.2017
Subqueries
Konzept:
Bestimmte Elemente einer SQL-Query sind selbst wieder Queries
Welche ?
• Spalten im Select
• Tabellen im From
• Input von arithmetischen Operationen (Vorsicht !)
• Input von Mengenoperationen
• Input von Exists
Warum ?
• Mehr Ausdrucksmöglichkeiten
• Zusammenfassung mehrerer Teilabfragen zu einer einzelnen
• Strukturierung
Übung Datenbanksysteme WS 2002/2003
08.04.2017
Subqueries im Select
• Hinzufügen von weiteren Spalten aus weiteren
Queries
• Syntax:
• Select a, b,
(select x from z)
From c
Siehe Aufgabe 2a)
Auf die Variablen der äußeren Anfrage kann von der
inneren zugegriffen werden
Modifizieren des Anfrage von 2a, um die
Rabattdifferenz anzuzeigen !
Übung Datenbanksysteme WS 2002/2003
08.04.2017
Suqueries in arithmethischen Operationen
• Ergebnis der Subquery wird in
arithmetischen Ausdruck weiterverwendet
• Beispiel: Aufgabe 2b)
• Vorsicht:
• Ergebnis muss ein einzelner Wert sein !
• Nützlich für:
• Arithmetische Mengenvergleiche ?
• ...
Übung Datenbanksysteme WS 2002/2003
08.04.2017
Subqueries bei FROM
•
•
•
•
„Zwischentabellen“ in einer Query
Syntax:
... FROM (Select * from a) <Name> ...
Name gibt der temporären Tabelle einen Namen – warum
notwendig ?
Vorteile:
• Integration mehrerer Teilqueries in eine einzelne Query
• Zwischenergebnisse müssen nicht explizit abgespeichert
werden
• Optimierer kann evtl. besseren Plan finden
• Beispiel: Aufgabe 2c)
Übung Datenbanksysteme WS 2002/2003
08.04.2017
Subqueries mit Mengenoperatoren
• Ergebnis der Subquery stellt Menge dar, auf die
bestimmte Operation angewandt wird
• Wie muss das Ergebnis der Subquery aussehen ?
=> Schemata strukturell identisch !
Mengenoperatoren:
–
–
–
–
In
Union
intersect
Except
• Beispiel: Aufgabe 2d
Übung Datenbanksysteme WS 2002/2003
08.04.2017
Subqueries mit Quantifikatioren
• Eigentlich Spezialfall der Mengenoperatoren
• Weniger häufig benötigt als im Tupelkalkül
• Wichtigster Operator:
EXISTS (bzw. NOT EXISTS)
• Explizites FOR ALL (noch) nicht Teil von SQL
• mit EXISTS ausdrücken
• Aber
• ALL oder SOME im Mengenvergleich
• > ALL ()
Übung Datenbanksysteme WS 2002/2003
08.04.2017
Beispiel: Aufgabe 2e
• Finden Sie einen Zug, der zu allen Stationen
ausser Ingolstadt faehrt
• Lösungsvorschläge ???
• Allquantor worauf anwenden, wodurch
ersetzen ?
• Zählen ?
• Mengenvergleiche ???
Übung Datenbanksysteme WS 2002/2003
08.04.2017
Aufgabe 2e: Lösungsansatz
Allquantifizierung ersetzen
• Ein Zug muss in allen Stationen (ohne Ingolstadt)
ankommen
• für alle Stationen (außer Ingolstadt) muss es eine
Verbindung geben, die zu dieser Station fährt und
bei der der Zug der gleiche ist
• kein „für alle“ in Standard-SQL
• Transformation von „für alle existiert ein“ zu
“es gibt keines, für das nicht existiert
• Probieren wir jetzt aus ...
Übung Datenbanksysteme WS 2002/2003
08.04.2017
Hinweise zur Verwendung von Subqueries
• Durch Subqueries gibt es viele semantisch äquivalente
Möglichkeiten, eine Anfrage auszudrücken !
• Vorsicht vor zu vielen Subqueries
• Warum nicht ?
• Viele Optimizer arbeiten schlecht mit Subqueries (Oracle)
• Vorsicht bei korrelierten Subqueries !
• Bei jedem korreliertem Wert der äußeren Query muss die
innere erneut ausgewertet werden
• Kann teuer werden
• Wenn möglich, Anfragen dekorrelieren !
Übung Datenbanksysteme WS 2002/2003
08.04.2017
Herunterladen