Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R 1.007 Vorlesung #6 SQL (Teil 3)

Ähnliche Präsentationen


Präsentation zum Thema: "WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R 1.007 Vorlesung #6 SQL (Teil 3)"—  Präsentation transkript:

1 WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R 1.007 Vorlesung #6 SQL (Teil 3)

2 WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R 1.007 © Bojan Milijaš, 07.11.2013 Fahrplan Besprechung eines Beispiels, SQL-Übungen Quantifizierte Anfragen Doppelter NOT EXISTS HAVING count = JOINs in SQL-92 CROSS, NATURAL, INNER, LEFT/RIGHT/FULL OUTER Rekursion Standard SQL (geschachtelt, entschachtelt) in ORACLE (CONNECT BY PRIOR) in DB2 (WITH View) Vorlesung #6 - SQL (Teil 3)

3 WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R 1.007 © Bojan Milijaš, 07.11.2013Vorlesung #6 - SQL (Teil 3) Quantifizierte Anfragen in SQL Es gibt keinen expliziten Allquantor Es gibt aber den Existenzquantor: exists, not exists wieder: Professoren, die keine Vorlesung halten select Name, PersNr from Professoren p where not exists ( select * from Vorlesungen where gelesenVon = p.PersNr );

4 WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R 1.007 © Bojan Milijaš, 07.11.2013Vorlesung #6 - SQL (Teil 3)

5 WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R 1.007 © Bojan Milijaš, 07.11.2013Vorlesung #6 - SQL (Teil 3)

6 WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R 1.007 © Bojan Milijaš, 07.11.2013Vorlesung #6 - SQL (Teil 3) Quantifizierte Anfragen in SQL (4) Wer hat alle vierstündigen Vorlesungen gehört? select s.* from Studenten s where not exists (select * from Vorlesungen v where v.SWS = 4 and not exists (select * from hören h where h.VorlNr = v.VorlNr and h.MatrNr=s.MatrNr ) );

7 WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R 1.007 © Bojan Milijaš, 07.11.2013Vorlesung #6 - SQL (Teil 3) Quantifizierte Anfragen in SQL (5) Allquantifizierung kann immer auch durch eine count Aggregation ausgedrückt werden Wir betrachten dazu eine etwas einfachere Anfrage, in der wir die (MatrNr der) Studenten ermitteln wollen, die alle Vorlesungen hören: select h.MatrNr from hören h group by h.MatrNr having count (*) = (select count (*) from Vorlesungen);

8 WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R 1.007 © Bojan Milijaš, 07.11.2013Vorlesung #6 - SQL (Teil 3) JOINs in SQL-92 cross join: Kreuzprodukt natural join: natürlicher Join join oder inner join: Theta-Join left outer join: linker äußerer Join right outer join: rechter äußerer Join full outer join: äußerer Join

9 WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R 1.007 © Bojan Milijaš, 07.11.2013Vorlesung #6 - SQL (Teil 3) CROSS JOIN (Kartesisches Produkt) SELECT * FROM Studenten CROSS JOIN prüfen; ist äquivalent zu SELECT * FROM Studenten, prüfen;

10 WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R 1.007 © Bojan Milijaš, 07.11.2013Vorlesung #6 - SQL (Teil 3) NATURAL JOIN (natürlicher Verbund) SELECT * FROM Studenten NATURAL JOIN prüfen; ist äquivalent zu SELECT s.MatrNr, s.Name, s.Semester, /* p.MatrNr ausgelassen */ p.VorlNr, p.PersNr, p.Note FROM Studenten s, prüfen p WHERE s.MatrNr = p.MatrNr;

11 WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R 1.007 © Bojan Milijaš, 07.11.2013Vorlesung #6 - SQL (Teil 3) JOIN (Theta Verbund) SELECT * FROM Studenten s JOIN prüfen p ON s.MatrNr = p.MatrNr; ist äquivalent zu SELECT * FROM Studenten s, prüfen p WHERE s.MatrNr = p.MatrNr;

12 WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R 1.007 © Bojan Milijaš, 07.11.2013Vorlesung #6 - SQL (Teil 3) JOIN (Theta Verbund) (2) Allgemein – setzt die Gleichheit der Join- Spalten nicht voraus: SELECT * FROM Professoren p JOIN Assistenten a ON p.persnr = a.boss;

13 WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R 1.007 © Bojan Milijaš, 07.11.2013Vorlesung #6 - SQL (Teil 3) * OUTER JOINs (äußerer Vebund) SELECT * FROM Studenten s LEFT OUTER JOIN pruefen p ON s.matrnr = p.matrnr; SELECT * FROM uni.hoeren h RIGHT OUTER JOIN uni.Vorlesungen v ON h.vorlnr = v.vorlnr;

14 WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R 1.007 © Bojan Milijaš, 07.11.2013Vorlesung #6 - SQL (Teil 3) * OUTER JOINs (äußerer Vebund) (2) SELECT * FROM Vorlesungen v FULL OUTER JOIN Assistenten a ON v.gelesenvon = a.Boss

15 WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R 1.007 Rekursion Rekursive Relation voraussetzen in UNI Schema voraussetzen : {[Vorgänger, Nachfolger]} Welche Vorlesungen muss man hören, um die Vorlesung Der Wiener Kreis zu verstehen? SELECT Vorgaenger FROM voraussetzen vs, Vorlesungen vo WHERE vs.Nachfolger = vo.VorlNr AND vo.Titel = 'Der Wiener Kreis' ; Vorlesung #7 - SQL (Teil 4)© Bojan Milijaš, 16.11.201215

16 WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R 1.007 Rekursion (2) Das sind aber nur die direkten Vorgänger, bzw. Vorgänger erster Stufe! Wie bekommt man alle? Zunächst Vorgänger zweiter Stufe: SELECT Vorgaenger FROM voraussetzen WHERE Nachfolger IN (SELECT Vorgaenger FROM voraussetzen, Vorlesungen FROM voraussetzen, Vorlesungen WHERE Nachfolger = VorlNr WHERE Nachfolger = VorlNr AND Titel = 'Der Wiener Kreis'); AND Titel = 'Der Wiener Kreis'); Vorlesung #7 - SQL (Teil 4)© Bojan Milijaš, 16.11.201216

17 WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R 1.007 Rekursion (3) SELECT Vogänger FROM voraussetzen WHERE Nachfolger IN (SELECT Vorgänger FROM voraussetzen, Vorlesungen FROM voraussetzen, Vorlesungen WHERE Nachfolger = VorlNr WHERE Nachfolger = VorlNr AND Titel = `Der Wiener Kreis´); AND Titel = `Der Wiener Kreis´); SELECT v1.Vogänger FROM voraussetzen v1, voraussetzen v2, Vorlesungen v WHERE v1.Nachfolger = v2.Vorgänger AND v2.Nachfolger = v.VorlNr AND v2.Nachfolger = v.VorlNr AND v.Titel = `Der Wiener Kreis´; AND v.Titel = `Der Wiener Kreis´; Entschachtelung Vorlesung #7 - SQL (Teil 4)© Bojan Milijaš, 16.11.201217

18 WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R 1.007 Rekursion (4) Man kann die gewonenne entschachtelte Abfrage verallgemeinern für die Vorgänger n-ten Stufe SELECT v1.Vorgänger FROM voraussetzen v1,..., voraussetzen v_n-1, voraussetzen vn, Vorlesungen v WHERE v1.Nachfolger = v2.Vorgänger AND... AND v_n-1.Nachfolger = vn.Vorgänger AND vn.Nachfolger = VorlNr AND v.Titel = `Der Wiener Kreis´; Vorlesung #7 - SQL (Teil 4)© Bojan Milijaš, 16.11.201218

19 WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R 1.007 Rekursion (5) (-) sehr umständlich zu formulieren (-) ineffizient bei der Durchführung (-) leider in SQL-Standard nicht anders möglich SQL ist nicht Turing-vollständig, SQL ist deklarativ, keine Schleifen, keine Kontrollverzweigungen, keine GO TO, JUMP Befehle oder ähnliches Das Finden aller Vorgänger nennt man allgemein Berechnen der transitiver Hülle Vorlesung #7 - SQL (Teil 4)© Bojan Milijaš, 16.11.201219

20 WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R 1.007 Rekursion (6) – Transitive Hülle voraussetzen Der Wiener Kreis WissenschaftstheorieBioethikErkenntnistheorieEthikMäeutik Grundzüge Vorlesung #7 - SQL (Teil 4)© Bojan Milijaš, 16.11.201220

21 WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R 1.007 Rekursion (7) – Transitive Hülle trans A,B (R)= {(a,b) k IN ( 1,..., k R ( 1.A= 2.B 1.A= 2.B k-1.A= k.B k-1.A= k.B 1.A= a 1.A= a k.B= b))} k.B= b))} Vorlesung #7 - SQL (Teil 4)© Bojan Milijaš, 16.11.201221

22 WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R 1.007 Rekursion (8) – Oracle CONNECT BY Konstrukt select Titel from Vorlesungen where VorlNr in (select Vorgaenger from voraussetzen from voraussetzen CONNECT BY Nachfolger = PRIOR Vorgaenger START WITH Nachfolger = START WITH Nachfolger = (select VorlNr (select VorlNr from Vorlesungen from Vorlesungen where Titel= 'Der Wiener Kreis')); where Titel= 'Der Wiener Kreis')); Vorlesung #7 - SQL (Teil 4)© Bojan Milijaš, 16.11.201222

23 WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R 1.007 Rekursion (9) in IBM DB2 with TransVorl (Vorg, Nachf) as (select Vorgaenger, Nachfolger from voraussetzen union all union all select t.Vorg, v.Nachfolger select t.Vorg, v.Nachfolger from TransVorl t, voraussetzen v from TransVorl t, voraussetzen v where t.Nachf= v.Vorgaenger) where t.Nachf= v.Vorgaenger) select Titel from Vorlesungen where VorlNr in (select Vorg from TransVorl where Nachf in (select Vorg from TransVorl where Nachf in (select VorlNr from Vorlesungen (select VorlNr from Vorlesungen where Titel= 'Der Wiener Kreis') ); where Titel= 'Der Wiener Kreis') ); Vorlesung #7 - SQL (Teil 4)© Bojan Milijaš, 16.11.201223

24 WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R 1.007 Vorlesung #6 Ende


Herunterladen ppt "WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R 1.007 Vorlesung #6 SQL (Teil 3)"

Ähnliche Präsentationen


Google-Anzeigen