15
WS 2012/13 Datenbanksysteme Fr 15:15 – 16:45 R 2.007 Vorlesung #6 SQL (Teil 3)

WS 2012/13 Datenbanksysteme Fr 15:15 – 16:45 R 2.007 Vorlesung #6 SQL (Teil 3)

Embed Size (px)

Citation preview

Page 1: WS 2012/13 Datenbanksysteme Fr 15:15 – 16:45 R 2.007 Vorlesung #6 SQL (Teil 3)

WS 2012/13Datenbanksysteme

Fr 15:15 – 16:45R 2.007

Vorlesung #6

SQL (Teil 3)

Page 2: WS 2012/13 Datenbanksysteme Fr 15:15 – 16:45 R 2.007 Vorlesung #6 SQL (Teil 3)

WS 2012/13Datenbanksysteme

Fr 15:15 – 16:45R 2.007

© Bojan Milijaš, 09.11.2012 2

„Fahrplan“ Besprechung eines Beispiels, SQL-Übungen Quantifizierte Anfragen JOINs in SQL-92

Vorlesung #6 - SQL (Teil 3)

Page 3: WS 2012/13 Datenbanksysteme Fr 15:15 – 16:45 R 2.007 Vorlesung #6 SQL (Teil 3)

WS 2012/13Datenbanksysteme

Fr 15:15 – 16:45R 2.007

© Bojan Milijaš, 09.11.2012 Vorlesung #6 - SQL (Teil 3) 3

Quantifizierte Anfragen in SQL

• Es gibt keinen expliziten Allquantor

• Es gibt aber den Existenzquantor: exists, not exist

• wieder: „Professoren, die keine Vorlesung halten“

select Name, PersNr

from Professoren p

where not exists

( select *

from Vorlesungen

where gelesenVon = p.PersNr );

Page 4: WS 2012/13 Datenbanksysteme Fr 15:15 – 16:45 R 2.007 Vorlesung #6 SQL (Teil 3)

WS 2012/13Datenbanksysteme

Fr 15:15 – 16:45R 2.007

© Bojan Milijaš, 09.11.2012 Vorlesung #6 - SQL (Teil 3) 4

Page 5: WS 2012/13 Datenbanksysteme Fr 15:15 – 16:45 R 2.007 Vorlesung #6 SQL (Teil 3)

WS 2012/13Datenbanksysteme

Fr 15:15 – 16:45R 2.007

© Bojan Milijaš, 09.11.2012 Vorlesung #6 - SQL (Teil 3) 5

Page 6: WS 2012/13 Datenbanksysteme Fr 15:15 – 16:45 R 2.007 Vorlesung #6 SQL (Teil 3)

WS 2012/13Datenbanksysteme

Fr 15:15 – 16:45R 2.007

© Bojan Milijaš, 09.11.2012 Vorlesung #6 - SQL (Teil 3) 6

Quantifizierte Anfragen in SQL (4)• Wer hat alle vierstündigen Vorlesungen gehört?

select s.*

from Studenten s

where not exists

(select *

from Vorlesungen v

where v.SWS = 4 and not exists

(select *

from hören h

where h.VorlNr = v.VorlNr and h.MatrNr=s.MatrNr ) );

Page 7: WS 2012/13 Datenbanksysteme Fr 15:15 – 16:45 R 2.007 Vorlesung #6 SQL (Teil 3)

WS 2012/13Datenbanksysteme

Fr 15:15 – 16:45R 2.007

© Bojan Milijaš, 09.11.2012 Vorlesung #6 - SQL (Teil 3) 7

Quantifizierte Anfragen in SQL (5)

• Allquantifizierung kann immer auch durch eine count Aggregation ausgedrückt werden

Wir betrachten dazu eine etwas einfachere Anfrage, in der wir die (MatrNr der) Studenten ermitteln wollen, die alle Vorlesungen hören:

select h.MatrNr

from hören h

group by h.MatrNr

having count (*) = (select count (*) from Vorlesungen);

Page 8: WS 2012/13 Datenbanksysteme Fr 15:15 – 16:45 R 2.007 Vorlesung #6 SQL (Teil 3)

WS 2012/13Datenbanksysteme

Fr 15:15 – 16:45R 2.007

© Bojan Milijaš, 09.11.2012 Vorlesung #6 - SQL (Teil 3) 8

JOINs in SQL-92

cross join: Kreuzprodukt natural join: natürlicher Join join oder inner join: Theta-Join left outer join: linker äußerer Join right outer join: rechter äußerer Join full outer join: äußerer Join

Page 9: WS 2012/13 Datenbanksysteme Fr 15:15 – 16:45 R 2.007 Vorlesung #6 SQL (Teil 3)

WS 2012/13Datenbanksysteme

Fr 15:15 – 16:45R 2.007

© Bojan Milijaš, 09.11.2012 Vorlesung #6 - SQL (Teil 3) 9

CROSS JOIN (Kartesisches Produkt)

SELECT *

FROM Studenten CROSS JOIN prüfen;

ist äquivalent zu

SELECT *

FROM Studenten, prüfen;

Page 10: WS 2012/13 Datenbanksysteme Fr 15:15 – 16:45 R 2.007 Vorlesung #6 SQL (Teil 3)

WS 2012/13Datenbanksysteme

Fr 15:15 – 16:45R 2.007

© Bojan Milijaš, 09.11.2012 Vorlesung #6 - SQL (Teil 3) 10

NATURAL JOIN(natürlicher Verbund)SELECT *

FROM Studenten NATURAL JOIN prüfen;

ist äquivalent zu

SELECT s.MatrNr, s.Name, s.Semester,

/* p.MatrNr ausgelassen */

p.VorlNr, p.PersNr, p.Note

FROM Studenten s, prüfen p

WHERE s.MatrNr = p.MatrNr;

Page 11: WS 2012/13 Datenbanksysteme Fr 15:15 – 16:45 R 2.007 Vorlesung #6 SQL (Teil 3)

WS 2012/13Datenbanksysteme

Fr 15:15 – 16:45R 2.007

© Bojan Milijaš, 09.11.2012 Vorlesung #6 - SQL (Teil 3) 11

JOIN(Theta Verbund)SELECT * FROM Studenten s JOIN prüfen p ON s.MatrNr = p.MatrNr;

ist äquivalent zu

SELECT * FROM Studenten s, prüfen p WHERE s.MatrNr = p.MatrNr;

Page 12: WS 2012/13 Datenbanksysteme Fr 15:15 – 16:45 R 2.007 Vorlesung #6 SQL (Teil 3)

WS 2012/13Datenbanksysteme

Fr 15:15 – 16:45R 2.007

© Bojan Milijaš, 09.11.2012 Vorlesung #6 - SQL (Teil 3) 12

JOIN(Theta Verbund) (2)

Allgemein – setzt die Gleichheit der Join-Spalten nicht voraus:

SELECT *

FROM Professoren p JOIN

Assistenten a

ON p.persnr = a.boss;

Page 13: WS 2012/13 Datenbanksysteme Fr 15:15 – 16:45 R 2.007 Vorlesung #6 SQL (Teil 3)

WS 2012/13Datenbanksysteme

Fr 15:15 – 16:45R 2.007

© Bojan Milijaš, 09.11.2012 Vorlesung #6 - SQL (Teil 3) 13

* OUTER JOINs(äußerer Vebund)SELECT * FROM Studenten s LEFT OUTER JOIN pruefen p ON s.matrnr = p.matrnr;

SELECT * FROM uni.hoeren h RIGHT OUTER JOIN uni.Vorlesungen v ON h.vorlnr = v.vorlnr;

Page 14: WS 2012/13 Datenbanksysteme Fr 15:15 – 16:45 R 2.007 Vorlesung #6 SQL (Teil 3)

WS 2012/13Datenbanksysteme

Fr 15:15 – 16:45R 2.007

© Bojan Milijaš, 09.11.2012 Vorlesung #6 - SQL (Teil 3) 14

* OUTER JOINs(äußerer Vebund) (2)

SELECT *

FROM Vorlesungen v FULL OUTER JOIN

Assistenten a

ON v.gelesenvon = a.Boss

Page 15: WS 2012/13 Datenbanksysteme Fr 15:15 – 16:45 R 2.007 Vorlesung #6 SQL (Teil 3)

WS 2012/13Datenbanksysteme

Fr 15:15 – 16:45R 2.007

Vorlesung #6

Ende