SQL Wiederholung Datenbanktechnologien Prof. Dr. Ingo Claÿen Prof. Dr. Martin Kempa Hochschule für Technik und Wirtschaft Berlin Verbunde Aggregation und Gruppierung Unterabfragen Verbunde Inner-Join I Nur Zeilen mit Verbindung erscheinen im Ergebnis I SQL-Anweisung: select s.MatrNr, Name, Studiengang from Student s inner join Einschreibung e on s.MatrNr = e.MatrNr; I Alte Schreibweise: select s.MatrNr, Name, Studiengang from Student s, Einschreibung e where s.MatrNr = e.MatrNr; SQL Wiederholung Ingo Claÿen, Martin Kempa 2/12 Verbunde Left-Outer-Join I Alle Zeilen der linken Tabelle erscheinen im Ergebnis I Nullwerte in Spalten der rechten Tabelle ohne Verbindung I SQL-Anweisung: select s.MatrNr, Name, Studiengang from Student s left outer join Einschreibung e on s.MatrNr = e.MatrNr; SQL Wiederholung Ingo Claÿen, Martin Kempa 3/12 Verbunde Theta-Join I Statt = sind auch andere Vergleichsoperatoren erlaubt, z.B > I SQL-Anweisung: select s.MatrNr, Name, Studiengang from Student s inner join Einschreibung e on s.MatrNr > e.MatrNr; SQL Wiederholung Ingo Claÿen, Martin Kempa 4/12 Verbunde Self-Join I Verbindung einer Tabelle mit sich selbst I Gleiche Tabelle mit verschiedenen Alias-Namen I SQL-Anweisung: select v1.VNR, v1.Bezeichnung, v2.Bezeichnung Vorkenntnis from Veranstaltung v1 left outer join Veranstaltung v2 on v1.Voraussetzung = v2.VNR; SQL Wiederholung Ingo Claÿen, Martin Kempa 5/12 Aggregation und Gruppierung Aggregation I Zusammenfassung mehrerer Zeilen zu einer Zeile I I I I I avg Mittelwert count Anzahl Zeilen max Maximum min Minimum sum Summe SQL Wiederholung Ingo Claÿen, Martin Kempa 6/12 Aggregation und Gruppierung Gruppierung I Aufteilung Daten einer Tabelle in Gruppen I SQL-Anweisung select VNR, avg(Note) AvgNote, max(Note) MaxNote, min(Note) MinNote from Bewertung group by VNR order by VNR; I Einschränkung auf Gruppierungen, die eine Bedingung erfüllen I SQL-Anweisung select VNR, avg(Note) AvgNote, count(*) AnzBewertungen from Bewertung group by VNR having count(note) > 2; I Having-Klausel ist wie Where-Klausel, nur für Gruppen SQL Wiederholung Ingo Claÿen, Martin Kempa 7/12 Unterabfragen Unterabfragen als abgeleitete Tabelle I Jede Abfrage liefert als Ergebnis eine Tabelle I Ermöglicht Schachtelung von Abfragen I SQL-Beispiel select VNR, AvgNote, AnzBewertungen from ( select VNR, count(*) AnzBewertungen, avg(NOTE) AvgNote from Bewertung group by VNR) where AnzBewertungen > 2; SQL Wiederholung Ingo Claÿen, Martin Kempa 8/12 Unterabfragen Unterabfrage in Bedingung I Unterabfrage innerhalb der Where-Klausel I SQL-Beispiel select * from Bewertung where Note <= ( select avg(Note) from Bewertung); I Degenerierte Tabelle: Eine Spalte, eine Zeile I Wird als Wert interpretiert SQL Wiederholung Ingo Claÿen, Martin Kempa 9/12 Unterabfragen Korrelierte Unterabfrage in Ausgabespalte I SQL-Beispiel select distinct VNR, Note, ( select avg(Note) from Bewertung b1 where b1.VNR = b2.VNR) AvgNote from Bewertung b2 order by VNR; SQL Wiederholung Ingo Claÿen, Martin Kempa 10/12 Unterabfragen Korrelierte Unterabfrage in Where-Klausel I Zeilen der Unterabfrage beziehen sich auf Zeilen der Oberabfrage I SQL-Beispiel select * from Bewertung b1 where Note = ( select min(Note) from Bewertung b2 where b2.VNR = b1.VNR); I Entspricht Schleife: Auswertung der Unterabfrage für jeden Datensatz der Oberabfrage SQL Wiederholung Ingo Claÿen, Martin Kempa 11/12 Unterabfragen Prädikate mit Unterabfragen I in-Prädikat select MatrNr from Bewertung where Note in (1.3, 2.3); I all-Prädikat select MatrNr from Bewertung where Note <= all (select Note from Bewertung); I some-Prädikat select MatrNr from Bewertung where Note <= some (1.0, 1.3, 2.3); I exists-Prädikat select MatrNr from Bewertung b1 where exists (select * from Bewertung b2 where b2.MatrNr <> b1.MatrNr and b1.Note < b2.Note); SQL Wiederholung Ingo Claÿen, Martin Kempa 12/12