SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 Vorlesung #7 SQL (Teil 2)

Slides:



Advertisements
Ähnliche Präsentationen
ER-Datenmodell und Abfragen in SQL
Advertisements

Datenbanksysteme für FÜ SS 2000 Seite Worzyk FH Anhalt SQL 1 Aussagen über Tabelleninhalte Aussagelogik Äquivalenzen Select Where.
Datenbanksysteme für FÜ WS2004/05 SQL1 - 1 Worzyk FH Anhalt SQL 1 Aussagen über Tabelleninhalte Aussagelogik Äquivalenzen Select Where.
Bauinformatik II Softwareanwendungen 1
Systemüberblick Beispiele: Microsoft Access Oracle Ingres Informix
Kapitel 2 SQL Anfragen.
Kapitel 2 SQL Anfragen.
Inner Joins.
Übung Datenbanksysteme SQL-Anfragen (2)
Der letzte Schliff für Abfragen Übersicht über die Aggregatfunktionen.
SQL 2 Order by null Aggregatfunktionen group by Join subselect.
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.
Abfragen – Tipps und Tricks Buch S102ff (Informatik I, Oldenbourg-Verlag) Nach einer Vorlage von Dieter Bergmann.
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.
SQL-Datentypen INTEGER
Ralf KüstersDagstuhl 2008/11/30 2 Ralf KüstersDagstuhl 2008/11/30 3.
Übung 1: SQL Übungen finden bei Bedarf anstelle der Vorlesungen statt
Datenbankentwicklung IV-LK
Auslegung eines Vorschubantriebes
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 2013/14 Datenbanksysteme Do 17:00 – 18:30 R Vorlesung #6 SQL (Teil 3)
WS 2009/10 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 #6 SQL (Teil 3)
WS 2007/08 Datenbanksysteme Mi 17:00 – 18:30 R Vorlesung #3 Relationale Anfragesprachen.
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 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 Vorlesung #5 Relationale Anfragesprachen.
WS 2011/12 Datenbanksysteme Fr 15:15 – 16:45 R Vorlesung #3 Das relationale Modell (Teil 2)
Einschub Normalisierung-Denormalisierung
Einschub Normalisierung-Denormalisierung
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 #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 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.
SQL - Structured Query Language AIFB SS (1/9) Join-Operationen in SQL-92(1/9) Syntax einer Join-Operation: join-op := CROSS JOIN | [NATURAL]
Analyseprodukte numerischer Modelle
Verdichten von Daten mit Gruppenfunktionen
Datenbanksysteme II Vorlesung WS 2006 / 2007 Paul Manthey
WS 2004/2005 Datenbanken II - 5W Mi 17:00 – 18:30 G 3.18 Vorlesung #3 Anfragebearbeitung (Teil 1)
Vorlesung #5 SQL (Teil 2).
1 Differenzierte Verbindungsoperationen (1) Beobachtung: Einfach zu formulierende Verbindungen wie ein Natural Join sind nicht als solche dokumentiert.
RelationentheorieObjektorientierte Datenbanken  AIFB SS Anfragen auf Sammlungen(1/29) OQL besteht aus einer Menge von Anfrageausdrücken, die.
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)
1 Gruppierung, Aggregierung und Sortierung (1) Finde für jeden Flugzeugtyp die Zahl aller von Frankfurt abgehenden Flüge und sortiere Ergebnis nach Flugzeugtyp:
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!“
WS 2015/16 Datenbanksysteme Fr 17:00 – 18:30 R Vorlesung #3 Das relationale Modell (Teil 2)
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:

SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 Vorlesung #7 SQL (Teil 2)

SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 © Bojan Milijaš, Vorlesung #7 - SQL (Teil 2)2 Fahrplan Besprechung der Übungsaufgaben Geschachtelte Anfragen in SQL Korrelierte vs. Unkorrelierte Anfragen Entschachtelung der Anfragen Operationen der Mengenlehre Spezielle Sprachkonstrukte (BETWEEN, CASE, LIKE) Joins in SQL-92

SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 © Bojan Milijaš, Vorlesung #7 - SQL (Teil 2)3 Geschachtelte Anfragen In SQL ist es möglich, SELECT Anweisungen auf viele Weisen zu verknüpfen und zu verschachteln Man unterscheidet zwischen Anfragen, die ein Tupel (eine Zeile) zurückliefern, von denen, die mehrere Tupeln (Zeilen) ergeben Die Anfragen können dann als Unterfragen in SELECT, FROM oder WHERE Teil eingesetzt werden

SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 © Bojan Milijaš, Vorlesung #7 - SQL (Teil 2)4 Geschachtelte Anfragen (2)... in WHERE-Klausel Welche Prüfungen sind besser als durchschnittlich verlaufen? SELECT * FROM prüfen WHERE Note < ( select avg (Note) from prüfen );

SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 © Bojan Milijaš, Vorlesung #7 - SQL (Teil 2)5 Geschachtelte Anfragen (3)... in SELECT-Klausel Professoren mit deren Lehrbelastung und durchschnittlicher Lehrbelsatung SELECT PersNr, Name, sum(SWS) AS Lehrbelastung, ( select avg (sum(SWS)) from Vorlesungen group by gelesenVon) AS Durchschnitt FROM Professoren p, Vorlesungen v WHERE p.PersNr = v.gelesenVon GROUP BY PersNr, Name;

SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 © Bojan Milijaš, Vorlesung #7 - SQL (Teil 2)6 Geschachtelte Anfragen (4)... in SELECT-Klausel Professoren mit deren Lehrbelastung und durchschnittlicher Lehrbelsatung – korreliert ohne GROUP BY: SELECT PersNr, Name, (select sum (SWS) from Vorlesungen where gelesenVon = p.PersNr) AS Lehrbelastung, (select sum(SWS) / count(DISTINCT gelesenVon) from Vorlesungen) AS Durchschnitt FROM Professoren p

SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 © Bojan Milijaš, Vorlesung #7 - SQL (Teil 2)7 Geschachtelte Anfragen (5)... in FROM-Klausel fleißige Studenten – die mehr als 2 Vorlesungen hören: SELECT tmp.MatrNr, tmp.Name, tmp.VorlAnzahl FROM (select s.MatrNr, s.Name, count(*) as VorlAnzahl from Studenten s, hoeren h where s.MatrNr=h.MatrNr group by s.MatrNr, s.Name) tmp WHERE tmp.VorlAnzahl > 2;

SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 © Bojan Milijaš, Vorlesung #7 - SQL (Teil 2)8 Korreliert vs. unkorreliert Achtung: funktioniert in der Original-Beispiel- Datenbank UNI nicht, da GebDatum fehlt! Alle Studenten, die älter als der jüngste Professor sind - korrelierte Formulierung select s.* from Studenten s where exists (select p.* from Professoren p where p.GebDatum > s.GebDatum);

SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 © Bojan Milijaš, Vorlesung #7 - SQL (Teil 2)9 Korreliert vs. Unkorreliert (2) Äquivalente unkorrelierte Formulierung select s.* from Studenten s where s.GebDatum < (select max (p.GebDatum) from Professoren p); Vorteil: Unteranfrageergebnis kann materialisiert werden Unteranfrage braucht nur einmal ausgewertet zu werden

SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 © Bojan Milijaš, Vorlesung #7 - SQL (Teil 2)10 Entschachtelung korrelierter Unteranfragen Assistenten, die für eine(n) jüngere(n) Professor(in) arbeiten select a.* from Assistenten a where exists ( select p.* from Professoren p where a.Boss = p.PersNr and p.GebDatum > a.GebDatum); Entschachtelung durch Join select a.* from Assistenten a, Professoren p where a.Boss = p.PersNr and p.GebDatum > a.GebDatum;

SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 © Bojan Milijaš, Vorlesung #7 - SQL (Teil 2)11 Operationen der Mengenlehre Vereinigung – UNION bzw. UNION ALL Durchschnitt – INTERSECT Differenz – MINUS (auch EXCEPT) UNION, INTERSECT und MINUS setzen Schemagleichheit voraus Der Operator IN bzw. NOT IN testet auf Mengenmitgliedschaft Der Operator ALL testet, ob alle Ergebnisse der Unteranfrage den Vergleich erfüllen

SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 © Bojan Milijaš, Vorlesung #7 - SQL (Teil 2)12 Operationen der Mengenlehre (2) UNION – mit Duplikatelimierung, UNION ALL – ohne Duplikateliminierung (select Name from Assistenten ) union (select Name from Professoren );

SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 © Bojan Milijaš, Vorlesung #7 - SQL (Teil 2)13 Operationen der Mengenlehre (3) Mengendurchschnitt – INTERSECT Alle Professoren, die eine Vorlesung halten SELECT PersNr FROM Professoren INTERSECT SELECT gelesenVon FROM Vorlesungen

SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 © Bojan Milijaš, Vorlesung #7 - SQL (Teil 2)14 Operationen der Mengenlehre (4) Gleiche Abfrage, alle Professoren, die eine Vorlesung halten mit IN Operator SELECT PersNr FROM Professoren WHERE PersNr IN (SELECT gelesenVon FROM Vorlesungen);

SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 © Bojan Milijaš, Vorlesung #7 - SQL (Teil 2)15 Operationen der Mengenlehre (5) Mengendifferenz – MINUS Alle Professoren, die keine Vorlesung halten SELECT PersNr FROM Professoren MINUS SELECT gelesenVon FROM Vorlesungen;

SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 © Bojan Milijaš, Vorlesung #7 - SQL (Teil 2)16 Operationen der Mengenlehre (6) Gleiche Abfrage, alle Professoren, die keine Vorlesung halten mit NOT IN SELECT PersNr FROM Professoren WHERE PersNr NOT IN ( SELECT gelesenVon FROM Vorlesungen);

SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 © Bojan Milijaš, Vorlesung #7 - SQL (Teil 2)17 ALL Operator Studenten mit der größten Semesterzahl SELECT Name, Semester FROM Studenten WHERE Semester >= ALL (select Semester from Studenten); äquivalent SELECT Name, Semester FROM Studenten WHERE Semester >= (select max(Semester) from Studenten);

SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 © Bojan Milijaš, Vorlesung #7 - SQL (Teil 2)18 Spezielle Sprachkonstrukte BETWEEN select * from Studenten where Semester > = 1 and Semester < = 4; select * from Studenten where Semester between 1 and 4; select * from Studenten where Semester in (1,2,3,4);

SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 © Bojan Milijaš, Vorlesung #7 - SQL (Teil 2)19 Spezielle Sprachkonstrukte (2) CASE WHEN... THEN... ELSE... END – die erste qualifizierende WHEN Klausel wird ausgeführt select MatrNr, ( case when Note < 1.5 then ´sehr gut´ when Note < 2.5 then ´gut´ when Note < 3.5 then ´befriedigend´ when Note < 4.0 then ´ausreichend´ else ´nicht bestanden´end) from pruefen;

SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 © Bojan Milijaš, Vorlesung #7 - SQL (Teil 2)20 Spezielle Sprachkonstrukte (3) LIKE Operator – Vergleich von Zeichenketten "%" steht für beliebig viele (auch gar kein) Zeichen "_" steht für genau ein Zeichen select * from Studenten where Name like ´T%eophrastos´; select distinct Name from Vorlesungen v, hören h, Studenten s where s.MatrNr = h.MatrNr and h.VorlNr = v.VorlNr and v.Titel LIKE ´%thik%´;

SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 © Bojan Milijaš, Vorlesung #7 - SQL (Teil 2)21 Quantifizierte Anfragen in SQL Es gibt keinen expliziten Allquantor Es gibt aber den Existenzquantor: exists, not exist wieder: Professoren, die keine Vorlesung halten select Name, PersNr from Professoren p where not exists ( select * from Vorlesungen where gelesenVon = p.PersNr );

SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 © Bojan Milijaš, Vorlesung #7 - SQL (Teil 2)22

SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 © Bojan Milijaš, Vorlesung #7 - SQL (Teil 2)23

SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 © Bojan Milijaš, Vorlesung #7 - SQL (Teil 2)24 Quantifizierte Anfragen in SQL (5) 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 ) );

SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 © Bojan Milijaš, Vorlesung #7 - SQL (Teil 2)25 Quantifizierte Anfragen in SQL (4) 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);

SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 © Bojan Milijaš, Vorlesung #7 - SQL (Teil 2)26 JOINs in SQL-92 cross join: Kreuzprodukt natural join: natürlicher Join join oder inner join: Theta-Join left, right oder full outer join: äußerer Join select * from R 1, R 2 where = R 1.A = R 2.B; select * from R 1 join R 2 on R 1.A = R 2.B;

SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 © Bojan Milijaš, Vorlesung #7 - SQL (Teil 2)27

SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 © Bojan Milijaš, Vorlesung #7 - SQL (Teil 2)28

SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 © Bojan Milijaš, Vorlesung #7 - SQL (Teil 2)29 JOINs in SQL-92 FULL OUTER JOIN select p.PersNr, p.Name, f.PersNr, f.Note, f.MatrNr, s.MatrNr, s.Name from Professoren p full outer join (pruefen f full outer join Studenten s on f.MatrNr= s.MatrNr) on p.PersNr=f.PersNr;

SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 Vorlesung #7 Ende