Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Vorlesung #5 SQL (Teil 2).

Ähnliche Präsentationen


Präsentation zum Thema: "Vorlesung #5 SQL (Teil 2)."—  Präsentation transkript:

1 Vorlesung #5 SQL (Teil 2)

2 „Fahrplan“ Aggregation und Gruppierung NULL -Werte, 3-wertige Logik
Kanonische Übersetzung (SQL  relationale Algebra) Geschachtelte Anfragen in SQL © Bojan Milijaš,

3 © Bojan Milijaš,

4 Aggregatfunktionen min, max, avg, sum, count SELECT min(Semester)
FROM Studenten; SELECT max(Semester) SELECT avg(Semester) SELECT sum(Semester) SELECT count(MatrNr), -- count(*) count(DISTINCT Semester) © Bojan Milijaš,

5 ... mit Gruppierung min, max, avg, sum, count mit GROUP BY
select gelesenVon, sum (SWS) from Vorlesungen group by gelesenVon; mit HAVING select gelesenVon, Name, sum (SWS) from Vorlesungen, Professoren where gelesenVon = PersNr and Rang = ´C4´ group by gelesenVon, Name having avg (SWS) >= 3; © Bojan Milijaš,

6 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 © Bojan Milijaš,

7 © Bojan Milijaš,

8 © Bojan Milijaš,

9 © Bojan Milijaš,

10 Ergebnis der Abfrage gelesenVon Name sum (SWS) 2125 Sokrates 10 2137
Kant 8 © Bojan Milijaš,

11 Geschachtelte Anfragen Korrelierte Anfragen Mengenoperationen
Ausblick Vorlesung #5 SQL, Fortsetzung Geschachtelte Anfragen Korrelierte Anfragen Mengenoperationen Quantifizierte Anfragen (, ) Spezielle Sprachkonstrukte Joins in SQL-92, SQL-99 Rekursion Sichten (Views) © Bojan Milijaš,

12 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 Studenten where Semester < 13 or Semester >= 13 Tupel (Zeilen) mit Null-Werten werden einfach nicht mitgezählt !!! © Bojan Milijaš,

13 Nullwerte (2) NULL + 1 = NULL, NULL * 1 = NULL Beispiele (Oracle)
SELECT NULL + 2 FROM Dual; SELECT NULL * 2 Dual ist so etwas wie „Dummy“-Tabelle in Oracle Es gilt die sogenannte 3-wertige Logik in SQL © Bojan Milijaš,

14 3-wertige Logik (NULL Logik)
not TRUE FALSE NULL and TRUE NULL FALSE or TRUE NULL FALSE © Bojan Milijaš,

15 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 © Bojan Milijaš,

16 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) © Bojan Milijaš,

17 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 © Bojan Milijaš,

18 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 ); © Bojan Milijaš,

19 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 v WHERE p.PersNr = v.gelesenVon GROUP BY PersNr, Name; © Bojan Milijaš,

20 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 © Bojan Milijaš,

21 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; © Bojan Milijaš,

22 Vorlesung #5 Ende


Herunterladen ppt "Vorlesung #5 SQL (Teil 2)."

Ähnliche Präsentationen


Google-Anzeigen