Hallo,
ich habe kein allgemeines Datenbank-Thema gefunden, deswegen schreibe ich es hier. Sollte dies doch woanders besser passen, dann verschiebt es einfach.
Ich schreibe demnächst eine Prüfung in DB.
Wir bekommen die Tabellendefinitionen(keine Datensätze) und entsprechende Aufgaben. Dazu müssen wir das auf Papier lösen.
Ich habe mal so eine Aufgabe gelöst und meine Bitte wäre es das ihr es euch mal kurz anschaut und sagt was richtig/falsch ist und warum?
Danke
MfG werdas34
ich habe kein allgemeines Datenbank-Thema gefunden, deswegen schreibe ich es hier. Sollte dies doch woanders besser passen, dann verschiebt es einfach.
Ich schreibe demnächst eine Prüfung in DB.
Wir bekommen die Tabellendefinitionen(keine Datensätze) und entsprechende Aufgaben. Dazu müssen wir das auf Papier lösen.
Ich habe mal so eine Aufgabe gelöst und meine Bitte wäre es das ihr es euch mal kurz anschaut und sagt was richtig/falsch ist und warum?
Code:
Buch: Buch_Nr (PK), Autor, Titel
Leser: Leser_Nr (PK), Leser_Name, Geburtsdatum
Ausleihe: Nr_Buch (FK, PK), Nr_Leser (FK, PK), Ausleihdatum (PK), Rückgabedatum, Ausleihdauer
a) alle ältere Leser ausgeben (vor 1.1.1950 geboren)
select Leser_Name from Leser
where Geburtsdatum < 1-1-1950;
b) Name der Leser die in einem Ausleihvorgang des Buches geschrieben vom Autor "Sedgewick" vermerkt sind
select Leser_Name from Leser
join Ausleihe on Leser_Nr = Nr_Leser
join Buch on Buch_Nr = Nr_Buch
where Autor = 'Sedgewick';
c) Titel aller Bücher mit deren Gesamtausleihdauer
select Titel, sum(Ausleihdauer) from Ausleihe
join Buch on Buch_Nr = Nr_Buch
group by Titel;
d) Namen der Leser, deren durchschnittliche Ausleihdauer kürzer ist als die des Leser mit der Nummer 2
select Leser_Name, avg(Ausleihdauer) from Ausleihe
join Leser on Leser_Nr = Nr_Leser
group by Leser_Name
having avg(Ausleihdauer) < (select avg(Ausleihdauer) from Ausleihe
join Leser on Leser_Nr = Nr_Leser
where Leser_Nr = 2);
e) Löschen aller Ausleihvorgänge des Lesers "Meier" und Löschen des Lesers "Meier" selbst
delete from Ausleihe
where Nr_Leser in (select Leser_Nr from Leser
where Leser_Name = 'Meier');
delete from Leser
where Leser_Name = 'Meier';
Danke
MfG werdas34