natürliche Verbünde in m:n-Beziehungen
Gib eine SQL-Anfrage an, die die geforderten Informationen enthält
Gegeben ist folgendes Datenbankschema mit der Beziehungstabelle ist_belegt_mit:

Kombiniere die Tabellen, so dass für jeden Belag alle Pizzen angegeben sind, auf denen dieser zum Einsatz kommt. Gib auch die Einkaufs- und Verkaufspreise mit an!
Lösung anzeigen
Bei genauerem Betrachten sollte dir auffallen, dass du alle Informationen haben möchtest:
SELECT *Du musst, um die Daten aus PIZZA mit den Daten aus BELAG zu kombinieren, über alle drei Tabellen gehen:
FROM PIZZA, BELAG,ist_belegt_mitDamit du nicht das kartesische Produkt sondern den natürlichen Verbund bekommst, musst du die Fremdschlüssel in ist_belegt_mit mit den zugehörigen Schlüsseln in PIZZA beziehungsweise BELAG verbinden:
WHERE Sorte= Pizzasorte
AND Art = Belagart;Insgesamt ergibt sich:
SELECT *
FROM PIZZA, BELAG, ist_belegt_mit
WHERE Sorte = Pizzasorte
AND Art = Belagart;Hinweis: Du kannst im WHERE-Teil überall vor die Attribute auch den Tabellennamen schreiben, also zum Beispiel PIZZA.Sorte. Allerdings ist das freiwillig, da durch die verschiedenen Attributbezeichner jedes Attribut klar identifizerbar ist.
Gib zu folgender Datenbankausprägung eine Abfrage an, die den Titel aller Filme ausgibt, in denen Joaquin Phoenix spielt.

Es gibt die Tabellen FILM, SCHAUSPIELER und spielt_in
Lösung anzeigen
Da Schauspieler in mehreren Filmen spielen und in einem Film meist mehr als ein Schauspieler mitwirkt, handelt es sich um eine m:n-Beziehung mit der Beziehungstabelle spielt_in.
Zum Verbinden der Tabellen benötigst du Informationen aus allen drei und musst die Fremdschlüsselbeziehung nutzen.
Damit nur die Filme mit Joaquin Phoenix angezeigt werden, benötigst du eine weitere Bedingung im WHERE-Teil.
SELECT Titel
FROM FILM, SCHAUSPIELER, spielt_in
WHERE SCHAUSPIELER.PersonenID = spielt_in.PersonenID
AND FILM.FilmID= spielt_in.FilmID
AND Name = "Joaquin Phoenix";Hinweis: Du kannst in der ersten Zeile sowohl FILM.Titel als auch nur Titel schreiben, da dieser Attributname nur einmal vorkommt und somit eindeutig zuordbar ist.
Die Beziehungstabelle spielt ist die Brücke zwischen ONLINESPIEL und SPIELER.
Gib den Namen des Spiels und den Nutzernamen der Spieler aus, falls der Spieler jünger ist als die Altersfreigabe des Spiels.

Lösung anzeigen
Heraussuchen sollst du Name aus ONLINESPIEL und Nutzername aus SPIELER.
Da es eine m:n-Beziehung zwischen den Tabellen gibt, liegen die SteamID und die SpielerID in der Beziehungstabelle spielt. Für die Abfrage benötigst du alle drei Tabellen.
Erneut musst du die Fremdschlüssel-Beziehung verwenden, um die Tabellen mit einem natürlichen Verbund zu kombinieren.
Außerdem musst du überprüfen, ob das Alter aus SPIELER kleiner ist als die Altersfreigabe in ONLINESPIEL.
SELECT Name, Nutzername
FROM ONLINESPIEL, SPIELER, spielt
WHERE ONLINESPIEL.SteamID= spielt.SteamID
AND SPIELER.SpielerID =spielt.SpielerID
AND Alter < Altersfreigabe;Hinweis: Du kannst in der ersten Zeile die Tabellennamen vor den Attributbezeichnern weglassen, da diese Bezeichner nur einmal vorkommt und somit eindeutig zuordbar ist.