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

Slides:



Advertisements
Ähnliche Präsentationen
Deduktive Datenbanken
Advertisements

Bauinformatik II Softwareanwendungen 1
SQL standardisierte Datendefinitions (DDL)- Datenmanipulations (DML)-
Systemüberblick Beispiele: Microsoft Access Oracle Ingres Informix
Kapitel 2 SQL Anfragen.
Kapitel 5 SQL DDL + DML.
Kapitel 2 SQL Anfragen.
Grundlagen Datenbanken
Inner Joins.
Übung Datenbanksysteme SQL-Anfragen (2)
Der letzte Schliff für Abfragen Übersicht über die Aggregatfunktionen.
1 Datenintegrität Statische Bedingung (jeder Zustand) Dynamische Bedingung (bei Zustandsänderung) Bisher: Definition eines Schlüssels 1:N - Beziehung Angabe.
1 Kapitel 8: Datenintegrität. 2 Datenintegrität Statische Bedingung (jeder Zustand) Dynamische Bedingung (bei Zustandsänderung) Bisher: Definition eines.
SQL in Visual FoxPro. © 1999 TMN-Systemberatung GmbH SQL Historie n SQL - Structured Query Language n In den 70er Jahren von IBM entwickelt n 1986 zum.
Übung 1: SQL Übungen finden bei Bedarf anstelle der Vorlesungen statt
WS 2009/10 Datenbanksysteme Fr 15:15 – 16:45 R Vorlesung #6 SQL (Teil 3)
WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R Vorlesung #4 SQL (Teil 1)
WS 2012/13 Datenbanksysteme Fr 15:15 – 16:45 R Vorlesung #6 SQL (Teil 3)
WS 2009/10 Datenbanksysteme Fr 15:15 – 16:45 R Vorlesung #3 Das relationale Modell (Teil 2)
WS 2007/08 Datenbanksysteme Mi 17:00 – 18:30 R Vorlesung #10 Physische Datenorganisation.
SS 2010 – IBB4C Datenmanagement Fr 15:15 – 16:45 R Vorlesung #2 Datenbankentwurf.
WS 2011/12 Datenbanksysteme Fr 15:15 – 16:45 R Vorlesung #6 SQL (Teil 3)
SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 Vorlesung #7 SQL (Teil 2)
WS 2007/08 Datenbanksysteme Mi 17:00 – 18:30 R Vorlesung #3 Relationale Anfragesprachen.
WS 2011/12 Datenbanksysteme Mi 15:15 – 16:45 R Vorlesung #9 Physische Datenorganisation.
Vorlesung #4 SQL (Teil 1).
SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 Vorlesung #3 ER Modellierung.
SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 Vorlesung #8 SQL (Teil 3)
SS 2012 – IBB4C Datenmanagement Fr 15:15 – 16:45 R Vorlesung #3 ER Modellierung.
SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 Vorlesung #5 Relationale Anfragesprachen.
WS 2012/13 Datenbanksysteme Fr 15:15 – 16:45 R Vorlesung #2 Das relationale Modell (Teil 1)
WS 2011/12 Datenbanksysteme Fr 15:15 – 16:45 R Vorlesung #3 Das relationale Modell (Teil 2)
SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 Vorlesung #6 SQL (Teil 1)
WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R Vorlesung #2 Das relationale Modell (Teil 1)
WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R Vorlesung #7 SQL (Teil 4)
WS 2013/14 Datenbanksysteme D0 15:15 – 16:45 R Vorlesung #5 SQL (Teil 2)
WS 2013/14 Datenbanksysteme Fr 17:00 – 18:30 R Vorlesung #3 Das relationale Modell (Teil 2)
WS 2012/13 Datenbanksysteme Fr 15:15 – 16:45 R Vorlesung #9 Anfragebearbeitung.
WS 2007/08 Datenbanksysteme Mi 17:00 – 18:30 R Vorlesung #9 Anfragebearbeitung (Teil 1)
WS 2007/08 Datenbanksysteme Mi 17:00 – 18:30 R Vorlesung #5 SQL (Teil 2)
WS 2012/13 Datenbanksysteme Fr 15:15 – 16:45 R Vorlesung #7 SQL (Teil 4)
WS 2012/13 Datenbanksysteme Fr 15:15 – 16:45 R Vorlesung #3 Das relationale Modell (Teil 2)
WS 2011/12 Datenbanksysteme Fr 15:15 – 16:45 R Vorlesung #4 SQL (Teil 1)
Datenbanksysteme für hörer anderer Fachrichtungen
WS 2011/12 Datenbanksysteme Fr 15:15 – 16:45 R Vorlesung #5 SQL (Teil 2)
Aggregatsfunktion SQL = Structured Query Language.
Vorlesung #10 Physische Datenorganisation
1 Gruppierung, Aggregierung und Sortierung (2) Abarbeitungsmodell bei Gruppierung: Werte from- und where-Klauseln aus wie bisher (Bildung von Kreuzprodukt.
WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R Vorlesung #9 Anfragebearbeitung.
SQL - Structured Query Language AIFB SS (1/9) Join-Operationen in SQL-92(1/9) Syntax einer Join-Operation: join-op := CROSS JOIN | [NATURAL]
Datenbanksysteme II Vorlesung WS 2006 / 2007 Paul Manthey
Vorlesung #5 SQL (Teil 2).
Vorlesung #2 Das relationale Modell (Teil 1)
1 Differenzierte Verbindungsoperationen (1) Beobachtung: Einfach zu formulierende Verbindungen wie ein Natural Join sind nicht als solche dokumentiert.
Modellierungsspezialisten DRITTE NORMALFORM! „Bei der Abfrage, können wir dann alles wieder zusammenfügen!“
WS 2014/15 Datenbanksysteme D0 15:15 – 16:45 R Vorlesung #6 SQL (Teil 3)
WS 2014/15 Datenbanksysteme Do 17:00 – 18:30 R Vorlesung #9 SQL Zusammenfassung.
Datenbanken abfragen mit SQL
Modellierungsspezialisten DRITTE NORMALFORM! „Bei der Abfrage, können wir dann alles wieder zusammenfügen!“
 standardisierte -Datendefinitionssprache (DDL) -Datenmanipulationssprache (DML) -Anfragesprache (Query)  derzeit aktueller Standard ist SQL 3  objektrelationale.
WS 2015/16 Datenbanksysteme Fr 17:00 – 18:30 R Vorlesung #3 Das relationale Modell (Teil 2)
Technische Universität München Übung zur Einführung in die Informatik für Hörer anderer Fachrichtungen im Sommersemester 2010 Sitzung 8: Die relationale.
Übung Datenbanksysteme I SQL
Vorlesung #4 Relationales Kalkül und SQL (Teil 1)
Vorlesung #5 SQL (Teil 2).
Vorlesung #6 SQL (Teil 3).
SQL Join.
Vorlesung #7 SQL (Teil 4).
SQL Join.
 Präsentation transkript:

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

WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R © Bojan Milijaš, 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)

WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R © Bojan Milijaš, Vorlesung #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 );

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

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

WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R © Bojan Milijaš, Vorlesung #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 ) );

WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R © Bojan Milijaš, Vorlesung #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);

WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R © Bojan Milijaš, Vorlesung #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

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

WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R © Bojan Milijaš, Vorlesung #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;

WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R © Bojan Milijaš, Vorlesung #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;

WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R © Bojan Milijaš, Vorlesung #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;

WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R © Bojan Milijaš, Vorlesung #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;

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

WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R 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š,

WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R 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š,

WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R 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š,

WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R 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š,

WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R 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š,

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

WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R 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š,

WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R 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š,

WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R 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š,

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