SQL Wiederholung - Datenbanktechnologien

Werbung
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
Herunterladen