24
WS 2015/16 Datenbanksysteme Fr 17:00 – 18:30 R 1.008 Vorlesung #5 SQL (Teil 2)

WS 2015/16 Datenbanksysteme Fr 17:00 – 18:30 R 1.008 Vorlesung #5 SQL (Teil 2)

Embed Size (px)

Citation preview

Page 1: WS 2015/16 Datenbanksysteme Fr 17:00 – 18:30 R 1.008 Vorlesung #5 SQL (Teil 2)

WS 2015/16Datenbanksysteme

Fr 17:00 – 18:30R 1.008

Vorlesung #5

SQL (Teil 2)

Page 2: WS 2015/16 Datenbanksysteme Fr 17:00 – 18:30 R 1.008 Vorlesung #5 SQL (Teil 2)

WS 2015/16Datenbanksysteme

Fr 17:00 – 18:30R 1.008

© Bojan Milijaš, 30.10.2015

„Fahrplan“ Kanonische Übersetzung (SQL relationale

Algebra) Aggregation und Gruppierung NULL -Werte, 3-wertige Logik Geschachtelte Anfragen in SQL

Page 3: WS 2015/16 Datenbanksysteme Fr 17:00 – 18:30 R 1.008 Vorlesung #5 SQL (Teil 2)

WS 2015/16Datenbanksysteme

Fr 17:00 – 18:30R 1.008

© Bojan Milijaš, 30.10.2015

Page 4: WS 2015/16 Datenbanksysteme Fr 17:00 – 18:30 R 1.008 Vorlesung #5 SQL (Teil 2)

WS 2015/16Datenbanksysteme

Fr 17:00 – 18:30R 1.008

Auswertungsplan (F10 – Explain Plan)

© Bojan Milijaš, 30.10.2015

Page 5: WS 2015/16 Datenbanksysteme Fr 17:00 – 18:30 R 1.008 Vorlesung #5 SQL (Teil 2)

WS 2015/16Datenbanksysteme

Fr 17:00 – 18:30R 1.008

Auswertungsplan (wei (F10 – Explain Plan)

© Bojan Milijaš, 30.10.2015

Page 6: WS 2015/16 Datenbanksysteme Fr 17:00 – 18:30 R 1.008 Vorlesung #5 SQL (Teil 2)

WS 2015/16Datenbanksysteme

Fr 17:00 – 18:30R 1.008

© Bojan Milijaš, 30.10.2015

Aggregatfunktionen min, max, avg, sum, count

SELECT min(Semester) FROM Studenten;SELECT max(Semester) FROM Studenten;SELECT avg(Semester) FROM Studenten;SELECT sum(Semester) FROM Studenten;SELECT count(MatrNr), -- count(*) count(DISTINCT Semester) FROM Studenten;

Page 7: WS 2015/16 Datenbanksysteme Fr 17:00 – 18:30 R 1.008 Vorlesung #5 SQL (Teil 2)

WS 2015/16Datenbanksysteme

Fr 17:00 – 18:30R 1.008

© Bojan Milijaš, 30.10.2015

... mit Gruppierung min, max, avg, sum, count mit GROUP BY

select gelesenVon, sum (SWS)from Vorlesungengroup by gelesenVon;

mit HAVINGselect gelesenVon, Name, sum (SWS)from Vorlesungen, Professorenwhere gelesenVon = PersNr and Rang = ´C4´group by gelesenVon, Namehaving avg (SWS) >= 3;

Page 8: WS 2015/16 Datenbanksysteme Fr 17:00 – 18:30 R 1.008 Vorlesung #5 SQL (Teil 2)

WS 2015/16Datenbanksysteme

Fr 17:00 – 18:30R 1.008

© Bojan Milijaš, 30.10.2015

Besonderheiten bei Aggregatoperationen• SQL erzeugt pro Gruppe ein Ergebnistupel• Deshalb müssen alle in der select-Klausel

aufgeführten Attribute - außer den aggregierten – auch in der group by-Klausel aufgeführt werden

• Nur so kann SQL sicherstellen, dass sich das Attribut nicht innerhalb der Gruppe ändert

SELECT A1, A2, An, count(*)FROM ... WHERE ..GROUP BY A1, A2, An

Page 9: WS 2015/16 Datenbanksysteme Fr 17:00 – 18:30 R 1.008 Vorlesung #5 SQL (Teil 2)

WS 2015/16Datenbanksysteme

Fr 17:00 – 18:30R 1.008

© Bojan Milijaš, 30.10.2015

Page 10: WS 2015/16 Datenbanksysteme Fr 17:00 – 18:30 R 1.008 Vorlesung #5 SQL (Teil 2)

WS 2015/16Datenbanksysteme

Fr 17:00 – 18:30R 1.008

© Bojan Milijaš, 30.10.2015

Page 11: WS 2015/16 Datenbanksysteme Fr 17:00 – 18:30 R 1.008 Vorlesung #5 SQL (Teil 2)

WS 2015/16Datenbanksysteme

Fr 17:00 – 18:30R 1.008

© Bojan Milijaš, 30.10.2015

Page 12: WS 2015/16 Datenbanksysteme Fr 17:00 – 18:30 R 1.008 Vorlesung #5 SQL (Teil 2)

WS 2015/16Datenbanksysteme

Fr 17:00 – 18:30R 1.008

© Bojan Milijaš, 30.10.2015

Ergebnis der Abfrage

gelesenVon Name sum (SWS)2125 Sokrates 102137 Kant 8

Page 13: WS 2015/16 Datenbanksysteme Fr 17:00 – 18:30 R 1.008 Vorlesung #5 SQL (Teil 2)

WS 2015/16Datenbanksysteme

Fr 17:00 – 18:30R 1.008

© Bojan Milijaš, 30.10.2015

SQL, Fortsetzung Geschachtelte Anfragen Korrelierte Anfragen Mengenoperationen Quantifizierte Anfragen (, ) Spezielle Sprachkonstrukte Joins in SQL-92, SQL-99 Rekursion Sichten (Views)

Ausblick Vorlesung #5

Page 14: WS 2015/16 Datenbanksysteme Fr 17:00 – 18:30 R 1.008 Vorlesung #5 SQL (Teil 2)

WS 2015/16Datenbanksysteme

Fr 17:00 – 18:30R 1.008

© Bojan Milijaš, 30.10.2015

Nullwerte unbekannter Wert „wird vielleicht später nachgereicht“ Nullwerte können auch im Zuge der

Anfrageauswertung entstehen (Bsp. äußere Joins) manchmal sehr überraschende Anfrageergebnisse,

wenn Nullwerte vorkommen UPDATE studenten SET semester = '' WHERE matrnr = 24002;

select count (*) from Studentenwhere Semester < 13 or Semester >= 13

Tupel (Zeilen) mit Null-Werten werden einfach nicht mitgezählt !!!

Page 15: WS 2015/16 Datenbanksysteme Fr 17:00 – 18:30 R 1.008 Vorlesung #5 SQL (Teil 2)

WS 2015/16Datenbanksysteme

Fr 17:00 – 18:30R 1.008

© Bojan Milijaš, 30.10.2015

Nullwerte (2) NULL + 1 = NULL, NULL * 1 = NULL Beispiele (Oracle)SELECT NULL + 2 FROM Dual;

SELECT NULL * 2 FROM Dual;

Dual ist so etwas wie „Dummy“-Tabelle in Oracle Es gilt die sogenannte 3-wertige Logik in SQL

Page 16: WS 2015/16 Datenbanksysteme Fr 17:00 – 18:30 R 1.008 Vorlesung #5 SQL (Teil 2)

WS 2015/16Datenbanksysteme

Fr 17:00 – 18:30R 1.008

© Bojan Milijaš, 30.10.2015

3-wertige Logik (NULL Logik)

notTRUE FALSENULL NULL

FALSE TRUE

and TRUE NULL FALSETRUE TRUE NULL FALSENULL NULL NULL FALSE

FALSE FALSE FALSE FALSE

or TRUE NULL FALSETRUE TRUE TRUE TRUENULL TRUE NULL NULL

FALSE TRUE NULL FALSE

Page 17: WS 2015/16 Datenbanksysteme Fr 17:00 – 18:30 R 1.008 Vorlesung #5 SQL (Teil 2)

WS 2015/16Datenbanksysteme

Fr 17:00 – 18:30R 1.008

© Bojan Milijaš, 30.10.2015

Regeln für NULL Werte In arithmetischen Ausdrücken werden NULL Werte

propagiert (NULL + 3 = NULL) Es gilt die 3-wertige Logik. Vergleichsoperatoren

(=, >,<=) liefern immer NULL zurück, wenn mindestens ein Argument NULL ist

Logische Ausdrücke werden entsprechend den vorgestellten 3-wertige-Logik Tabellen ausgewertet

Tupeln mit NULL als Ergebnis in einer WHERE Klausel werden nicht weitergereicht, d.h NULL Werte werden in WHERE Klauseln ausgelassen

Bei Gruppierung ist NULL ein eigenständiger Wert

Page 18: WS 2015/16 Datenbanksysteme Fr 17:00 – 18:30 R 1.008 Vorlesung #5 SQL (Teil 2)

WS 2015/16Datenbanksysteme

Fr 17:00 – 18:30R 1.008

© Bojan Milijaš, 30.10.2015

Behandlung von NULL Werten (Oracle und SQL-92) In Oracle gibt es eine „null value“ Funktion nvl (if

NULL then):SELECT nvl(NULL,5) + 2 AS Result FROM Dual;

Result ------ 7

Man kann NULL Werte mit IS NULL oder IS NOT NULL testen (SQL-92)

Page 19: WS 2015/16 Datenbanksysteme Fr 17:00 – 18:30 R 1.008 Vorlesung #5 SQL (Teil 2)

WS 2015/16Datenbanksysteme

Fr 17:00 – 18:30R 1.008

© Bojan Milijaš, 30.10.2015

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

Page 20: WS 2015/16 Datenbanksysteme Fr 17:00 – 18:30 R 1.008 Vorlesung #5 SQL (Teil 2)

WS 2015/16Datenbanksysteme

Fr 17:00 – 18:30R 1.008

© Bojan Milijaš, 30.10.2015

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 );

Page 21: WS 2015/16 Datenbanksysteme Fr 17:00 – 18:30 R 1.008 Vorlesung #5 SQL (Teil 2)

WS 2015/16Datenbanksysteme

Fr 17:00 – 18:30R 1.008

© Bojan Milijaš, 30.10.2015

Geschachtelte Anfragen (3) ... in SELECT-Klausel Professoren mit deren Lehrbelastung und

durchschnittlicher Lehrbelastung

SELECT PersNr, Name, sum(SWS) AS Lehrbelastung, ( select avg (sum(SWS))

from Vorlesungen group by gelesenVon) AS Durchschnitt FROM Professoren p, Vorlesungen vWHERE p.PersNr = v.gelesenVonGROUP BY PersNr, Name;

Page 22: WS 2015/16 Datenbanksysteme Fr 17:00 – 18:30 R 1.008 Vorlesung #5 SQL (Teil 2)

WS 2015/16Datenbanksysteme

Fr 17:00 – 18:30R 1.008

© Bojan Milijaš, 30.10.2015

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

Page 23: WS 2015/16 Datenbanksysteme Fr 17:00 – 18:30 R 1.008 Vorlesung #5 SQL (Teil 2)

WS 2015/16Datenbanksysteme

Fr 17:00 – 18:30R 1.008

© Bojan Milijaš, 30.10.2015

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) tmpWHERE tmp.VorlAnzahl > 2;

Page 24: WS 2015/16 Datenbanksysteme Fr 17:00 – 18:30 R 1.008 Vorlesung #5 SQL (Teil 2)

WS 2015/16Datenbanksysteme

Fr 17:00 – 18:30R 1.008

Vorlesung #5

Ende