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“ Kanonische Übersetzung (SQL  relationale Algebra)
Pen & Paper ReLaX ORACLE (Explain Plan) Aggregation und Gruppierung NULL -Werte, 3-wertige Logik Geschachtelte Anfragen in SQL

3

4 Beispiel

5 Beispiel (2)

6 Beispiel (3)

7 Auswertungsplan (F10 – Explain Plan)

8 Auswertungsplan 2 (F10 – Explain Plan)

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

10 ... 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;

11 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

12

13

14

15 Ergebnis der Abfrage gelesenVon Name sum (SWS) 2125 Sokrates 10 2137 Kant 8

16 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 !!!

17 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

18 3-wertige Logik (NULL Logik)
not TRUE FALSE NULL and TRUE NULL FALSE or TRUE NULL FALSE

19 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

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

21 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

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

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

24 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

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

26 Vorlesung #5 Ende


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

Ähnliche Präsentationen


Google-Anzeigen