Informatiker Board (http://www.informatikerboard.de/board/index.php)
- Themengebiete (http://www.informatikerboard.de/board/board.php?boardid=1)
--- Praktische Informatik (http://www.informatikerboard.de/board/board.php?boardid=6)
---- Datenbanken (http://www.informatikerboard.de/board/board.php?boardid=19)
----- Relationenalgebra und SQL (http://www.informatikerboard.de/board/thread.php?threadid=4078)


Geschrieben von Incipiens am 03.12.2018 um 03:19:

  Relationenalgebra und SQL

Meine Frage:
Hallo!

Ich knabbere gerade an einer Übung, die ich demnächst abgeben muss und komme nicht so richtig weiter. Hier erst einmal die Aufgabe:

Betrachten Sie zur Lösung der Aufgaben folgendes Schema:

Student (MatrNr, Name, Semester)
Vorlesung (VorlNr, Titel, PersNr)
Professor (PersNr, Name)
hoert (MatrNr, VorlNr)

a) Formulieren Sie folgende Fragen als Ausdrücke der Relationenalgebra:

(i) Erstellen Sie eine Liste mit Namen aller Studenten, die die Vorlesung mit der Vorlesungsnummer 3320 hören.
(ii) Welche Studenten (MatrNr, Name) hören mehr als eine Vorlesung?

b) Formulieren Sie die folgenden Anfragen in SQL:

(i) Geben Sie eine Liste der Teilnehmer (MatrNr) der Studenten aus, die mindestens eine Vorlesung bei Prof. ?J. Smith? hören. Die Ausgabetabelle soll die Spaltenüberschrift ?Teilnehmer? besitzen.
(ii) Lösen Sie mit einer Unterabfrage:
Welche Studenten (Name, MatrNr) des dritten Semesters hören keine Vorlesung bei
dem Professor mit der PersNr 987?

Meine Ideen:
a)
(i) Hier habe ich denke eine Lösung, aber ich bin nicht sicher, ob die richtig ist:

pi[Name](Student) u sigma[VorlNr=3320](hoert)

(ii) Bei dieser komme ich gar nicht weiter, weil mir nicht einfällt, wie ich da überhaupt herangehen soll, zu überprüfen, ob eine Matrikelnummer bei mehreren Vorlesungsnummern vorkommt. Da stecke ich hierbei fest:

pi[MatrNr, Name](Student)

b)
(ii) Hier habe ich etwas versucht, habe aber das Gefühl, dass ich da Blödsinn hingeschrieben habe:

CREATE TABLE Teilnehmer (
MatrNr INTEGER
SELECT MatrNr
FROM hoert
WHERE VorlNr = ( SELECT VorlNr
FROM Vorlesung
WHERE PersNr = ( SELECT PersNr
FROM Professor
WHERE Name IS 'J. Smith')
)
)

(ii) Und auch hier habe ich keinerlei Ahnung, wie ich in SQL etwas ausschließen soll.


Forensoftware: Burning Board, entwickelt von WoltLab GmbH