Aufgaben
Datenbankmodell der Filmdatenbank
Dies ist das Klassendiagramm einer Datenbank, die erfassen soll, wer welche FIlme geschaut hat und besitzt.
Du möchtest jetzt aus dieser Datenbank verschiedene Daten abfragen.
Überlege dir, welche Fragen du stellen könntest und versuche dabei zu identifizieren, was die Anfragen gemeinsam haben.
Beginne mit "Zeige mir...".

mögliche Anfragen:

  • Zeige mir alle Einträge in der Tabelle Person.
  • Zeige mir alle Filme, deren Genre Horror ist.
  • Zeige mir den Titel alle Filme, die kürzer sind als 100 Minuten.
  • Zeige mir alle Filme, die für mehr als 4 Oscars nominiert waren und einen Oscar gewonnen haben.
  • Zeige mir den Nickname aller Personen, die den Film mit der Nummer 1 geschaut haben.
  • Zeige mir, wer den Film "Inception" besitzt.

Gemeinsamkeiten der Abfragen

In allen Abfragen werden Datensätze aus den Relationen herausgesucht. Ein Datensatz ist ein Eintrag zu einer bestimmten Person (Tabelle PERSON), zu einem bestimmten Film (Tabelle FILM) oder zu einer schaut-Beziehung (Tabelle schaut).
Manchmal werden an diese Datensätze auch noch Bedingungen für Attributwerte gestellt ("...die kürzer als 100 Minuten sind", "4 Oscarnominierungen",...)
Es ist also wichtig zu wissen WAS von WO mit WELCHEN BEDINGUNGEN herausgesucht wird:

  • Zeige mir alle Einträge in der Tabelle Person.
  • Zeige mir alle Filme, deren Genre "Horror" ist.
  • Zeige mir den Titel alle Filme, die kürzer sind als 100 Minuten.
  • Zeige mir alle Filme, die für mehr als 4 Oscars nominiert waren und einen Oscar gewonnen haben.
  • Zeige mir den Nickname aller Personen, die den Film mit der FilmNr 1 geschaut haben. (diese Abfrage ist ein wenig tricky und kommt erst später)
  • Zeige mir, wer den Film "Inception" besitzt.

Abfragen ohne Bedinung

Fildatenbank fokus Filme
Oben siehst du einen Teil einer fertigen Filmdatenbank, die sich auf den Film und seine Mitwirkenden konzentriert. Gib zu folgenden Anfragen ein passendes SQL-Statement an
Gib alle Datensätze in der Relation FILM aus

Für diese Aufgabe benötigst Du folgendes Grundwissen: SQL Abfragen

Es sind alle Spalten der Relation Film verlangt. Mit * bekommst du die gesamte Relation
SELECT *
FROM FILM;
Gib den Namen aller Personen in FILMPERSON aus

Für diese Aufgabe benötigst Du folgendes Grundwissen: SQL Abfragen

Diesmal ist nur die Spalte Name gefragt. Selektiere sie im SELECT-Statement
SELECT Name
FROM FILMPERSON;
Finde für jeden Filmtitel heraus, wie viele Oscarnominierungen und -gewinne er hat

Für diese Aufgabe benötigst Du folgendes Grundwissen: SQL Abfragen

Du möchtest mehrere Spalten herausfinden. Trenne sie durch ein Komma im Select-Statement voneinander.
SELECT Titel, Oscarnominierungen, Oscars
FROM FILM;
Welche Abfrage liefert als Ergebnis jeden Filmtitel genau einmal?
SELECT * FROM FILM;
SELECT DISTINCT Titel FROM FILM;
SELECT Titel FROM FILM;
SELECT DISTINCT * FROM FILM;

Für diese Aufgabe benötigst Du folgendes Grundwissen: SQL Abfragen

Die richtige Antwort ist
SELECT DISTINCT Titel
FROM FILM;
Ohne DISTINCT werden Filmtitel, die doppelt in der Datenbank sind, auch doppelt ausgegeben.
Mit * erhält man alle Spalten einer Relation und nicht nur- wie verlangt- den Titel

Abfragen in einer Relation mit Bedingungen

Oben siehst du einen Teil einer fertigen Filmdatenbank, die sich auf den Film und seine Mitwirkenden konzentriert. Gib zu folgenden Anfragen ein passendes SQL-Statement an
Gib den Namen aller Personen aus, die mindestens einen Oscar gewonnen haben.

Für diese Aufgabe benötigst Du folgendes Grundwissen: einfache SQL Abfragen

Du möchtest nur eine Spalte im SELECT-Teil, nämlich Name.
Da Oscarauszeichnungen eine Ganzzahl ist, kannst du >0 schreiben. Du kannst aber auch >=1 schreiben.
SELECT Name
FROM FILMPERSON
WHERE Oscarauszeichnungen > 0;
Gib den Titel und die Länge aller Filme an, die länger als 80 aber kürzer als 120 Minuten sind.

Für diese Aufgabe benötigst Du folgendes Grundwissen: einfache SQL Abfragen

Du möchtest mehrere Spalten im SELECT-Statement. Trenne sie durch ein Komma.
Den Zahlbereich musst du als zwei Bedingungen schreiben, die du mit AND verbindest.
SELECT Titel, Laenge
FROM FILM
WHERE Laenge > 80 AND Laenge < 120;
Wenn du BETWEEEN kennst, geht die Abfrage auch so:
SELECT Titel, Laenge
FROM FILM
WHERE Laenge BETWEEN 81 AND 119;
Allerdings musst du hier auch die Grenzen anpassen.
Gib die IDs aller Filme aus, die das Genre "Komödie", "Science Fiction" oder "Action" habe. Filtere doppelte IDs heraus, falls ein Film mehr als eines der Genres hat.

Für diese Aufgabe benötigst Du folgendes Grundwissen: einfache SQL Abfragen

Du findest das Genre in der Tabelle ist_von_Genre.
Da nur mindestens eine der Bedingungen erfüllt sein müssen und nicht alle drei, brauchst du ein OR-Statement.
Doppelte FilmIDs filterst du mithilfe von DISTINCT im SELECT-Statement heraus.
SELECT DISTINCT FilmID
FROM ist_von_Genre
WHERE Genre="Komödie" 
 OR Genre="Science Fiction" 
 OR Genre="Action";
Deutlich kürzer wird es, wenn man es mitIN löst:
SELECT DISTINCT FilmID
FROM ist_von_Genre
WHERE Genre IN("Komödie","Science Fiction", "Action");
Finde die Titel aller Filme, die zwischen 2010 und 2020 herausgekommen sind (Das Datum hat die Form 'yyyy-mm-dd').

Für diese Aufgabe benötigst Du folgendes Grundwissen: einfache SQL Abfragen

Hier müssen wieder zwei Bedingungen gleichzeitig gelten, deshalb verwendest du AND.
Mit Datumsangaben kann wie mit Zahlen verglichen und gerechnet werden, deshalb kannst du >= und <= verwenden.
SELECT Titel
FROM FILM
WHERE Erscheinungsdatum >= '2010-01-01'
 AND Erscheinungsdatum <= '2020-12-31';
Auch hier kann man die Lösung mit BETWEEN schreiben:
SELECT Titel
FROM FILM
WHERE Erscheinungsdatum 
 BETWEEN '2010-01-01' AND '2020-31-12';
Gebe alle Namen von Personen aus, die nicht "Stan Lee" heißen. Filtere eventuelle doppelte Namen heraus.

Für diese Aufgabe benötigst Du folgendes Grundwissen: einfache SQL Abfragen

Mit NOT prüfst du, ob ein Attributwert nicht dem nachfolgenden Wert entspricht.
Vergiss nicht, DISTINCT zu verwenden, um Doppelungen herauszufiltern, die es ohne den Schlüssel geben kann.
SELECT Name
FROM FILMPERSON
WHERE NOT Name="Stan Lee"
Gib alle Filmtitel an, die zwar für einen Oscar nominiert waren, aber keinen bekommen haben.

Für diese Aufgabe benötigst Du folgendes Grundwissen: einfache SQL Abfragen

Beide Bedingungen müssen gleichzeitig gelten. Verwende deshalb AND.
SELECT Titel
FROM FILM
WHERE Oscarnominierungen > 0 
AND Oscars = 0;
Gib die Namen aller Filmpersonen an, die genau eine Oscarnominierung mehr haben als Oscarauszeichnungen, aber dabei auch mindestens zweimal nominiert waren.

Für diese Aufgabe benötigst Du folgendes Grundwissen: einfache SQL Abfragen

Du kannst mit Zahlen und Datumsangaben rechnen, also auch Differenzen bilden!
SELECT Name
FROM FILMPERSON
WHERE Oscarauszeichnungen = Oscarnominierungen - 1
AND Oscarnominierungen > 1;
Ausschnitt Streamingdatenbank NUTZER
Formuliere eine Abfrage, die aus der vorliegenden Tabelle NUTZER alle Daten der Nutzer herausliest, die mehr als 2000 Stunden gestreamt haben.

Für diese Aufgabe benötigst Du folgendes Grundwissen: SQL Abfragen

Du möchtest alle Daten dieser Nutzer: SELECT *
Du möchtest aus der Tabelle Nutzer auslesen: FROM NUTZER
Du möchtest nur Leute, die mehr als 2000 Nutzungsstunden haben: WHERE Nutzungsstunden>2000
SELECT *
FROM NUTZER
WHERE Nutzungsstunden > 2000;
Du hast folgende Tabellen zur Verwaltung der Datenbank eines Streaminganbieters:
Tabellen des Streamingdienstes
Du möchtest nun durch eine SQL-Anfrage den Namen und das Preismodell aller Nutzer, die mehr als 2000 Nutzungsstunden haben und findest online, dass dazu im FROM-Statement der SQL-Abfrage mehrere Tabellen angegeben werden können und man mit TABELLENNAME.Attributname auf das jeweilige Attribut einer Tabelle zugreifen kann.
Deine Abfrage lautet
SELECT NUTZER.UserID, ZAHLUNGSDATEN.KundenID, 
       ZAHLUNGSDATEN.Name, ZAHLUNGSDATEN.Preismodell
FROM NUTZER, ZAHLUNGSDATEN
WHERE NUTZER.Nutzungsstunden > 2000;
Du stutzt über das Ergebnis, statt 5 Zeilen hat deine Tabelle 45 Zeilen. Ein Ausschnitt sieht so aus:
kartesisches Produkt
Schau dir die Ausgangssituation und das Ergebnis an. Beschreibe anschließend in eigenen Worten: Was ist hier passiert?
Bestimme die Anzahl der Einträge in der Ergebnisrelation
T1: 3 Einträge
T2: 20 Einträge
T3: 12 Einträge
T4: 7 Einträge
Zu text-exercise-group 163096:
Nish 2020-05-20 08:34:55+0200
Hallo @Mellie :),

hier fehlt noch eine Grundwissensverlinkung ;) Hast du nichts zum Verlinken gehabt?

Hab mich noch gefragt, ob man hier zum Artikel kartesisches Produkt (https://de.serlo.org/2117) aus der Mathematik verlinken kann. Finde den Artikel zwar nicht so gut, da Beispiele und Übungsaufgaben fehlen, aber wenn ihr sonst keinen Artikel in der Informatik dazu erstellt, wäre das eine Möglichkeit.

Ansonsten finde ich es cool, dass du hier gleich zu einem Artikel aus dem Mathe-Bereich verlinkt hast :)

LG,
Nish

Antwort abschicken
Es wird das kartesische Produkt der beiden Tabellen gebildet und jeder Eintrag in T1 mit jedem Eintrag in T2 kombiniert.
Dabei ergeben sich 320=603\cdot20=60 Einträge in der Ergebnistabelle.
In der Mathematik visualisiert man solche kombinatorischen Aufgaben mit Baumdiagrammen.
SELECT *
FROM T2, T4;
Einträge
Es wird das kartesische Produkt der beiden Tabellen gebildet und jeder Eintrag in T2 mit jedem Eintrag in T4 kombiniert.
Dabei ergeben sich 720=1407\cdot20=140 Einträge in der Ergebnistabelle.
SELECT * 
FROM T1,T2, T3, T4;
(Du kannst auch den Term eingeben, der das Ergebnis liefert)
EInträge
Es wird das kartesische Produkt der Tabellen gebildet und jeder Eintrag einer jeden Tabelle mit allen Einträgen der anderen Tabellen kombiniert.
Ein Baumdiagramm kann nützlich sein, um dir die Situation im Kopf vorzustellen.
Es sind 320127=50403\cdot20\cdot12\cdot7=5040 Einträge in der Ergebnisrelation.
Mit der Abfrage
SELECT * 
FROM NUTZER, ZAHLUNGSDATEN;
erhältst du das zu umfangreiche kartesische Produkt, in dem jeder Eintrag aus NUTZER mit jedem Eintrag aus ZAHLUNGSDATEN kombiniert wird. Dabei möchtest du eigentlich nur die Einträge angezeigt haben, in denen der Fremdschlüssel ZAHLUNGSDATEN_KundenID in NUTZER mit dem Attributwert von KundenID ZAHLUNGSDATEN übereinstimmt:
natürlicher Verbund
(Ausschnitt aus der Ergebnistabelle)
Welche WHERE-Statements liefern dir nur die gelb markierten Datensätze mit den zusammenpassenden IDs?
WHERE NUTZER.UserID=ZAHLUNGSDATEN.KundenID
WHERE NUTZER.ZAHLUNGSDATEN_KundenID = ZAHLUNGSDATEN.KundenID
WHERE UserID= ZAHLUNGSDATEN_KundenID
WHERE ZAHLUNGSDATEN_KundenID = KundenID
Richtig sind
WHERE NUTZER.ZAHLUNGSDATEN_KundenID = ZAHLUNGSDATEN.KundenID
und
WHERE ZAHLUNGSDATEN_KundenID = KundenID
Du möchtest, dass die KundenIDs in beiden Tabellen übereinstimmen, deshalb bringt dir die UserID nichts und die beiden anderen Antworten sind falsch.
Da die Attribute unterschiedlich benannt sind, ist es optional, den Tabellennamen mit anzugeben.
Ein Streaminganbieter speichert Informationen über seine Nutzer in einer Datenbank.
Die Tabellen sehen beispielsweise so aus, wobei NUTZER.ZAHLUNGSDATEN_KundenID ein Fremdschlüssel zur Tabelle ZAHLUNGSDATEN ist:
Beispielausprägung der Streamingdatenbank
In dieser Datenbank können bei Preismodellen wie "For-Two" oder "Family" mehrere Nutzer zu einem Kunden und seinen Zahlungsdaten gehören, weswegen zwischen den Tabellen NUTZER und ZAHLUNGSDATEN eine 1:n-Beziehung gilt.
Die Finanzabteilung möchte wissen, welche Preismodelle hinter den Kunden stecken, die mehr als 2000 Stunden gestreamt haben.
Formuliere eine SQL-Anfrage, die den zugehörigen Kundennamen und das Preismodell aller Nutzer heraussucht, die mehr als 2000 Stunden gestreamt haben.

Für diese Aufgabe benötigst Du folgendes Grundwissen: Abfragen über mehrere Tabellen

Ausgegeben werden sollen der Name und das Preismodell aus ZAHLUNGSDATEN:
SELECT ZAHLUNGSDATEN.Name, ZAHLUNGSDATEN.Preismodell
Da die Nutzungsstunden in der Tabelle NUTZER liegen, müssen Daten aus zwei Tabellen verwendet werden:
FROM NUTZER,ZAHLUNGSDATEN
Damit man nicht das kartesische Produkt bekommt, sondern den natürlichen Verbund, muss die Fremdschlüssel-Beziehung zwischen den Tabellen genutzt werden:
WHERE ZAHLUNGSDATEN.KundenID =NUTZER.ZAHLUNGSDATEN_KundenID
Zusätzlich sollen jetzt nur die Datensätze angezeigt werden, in denen der Nutzer mehr als 2000 Stunden gestreamt hat. Mehrere Bedingungen, die gleichzeitig gelten sollen, werden mit AND verbunden:
AND NUTZER.Nutzungsstunden> 2000;
Die komplette Abfrage lautet also:
SELECT ZAHLUNGSDATEN.Name, ZAHLUNGSDATEN.Preismodell
FROM NUTZER, ZAHLUNGSDATEN
WHERE ZAHLUNGSDATEN.KundenID = NUTZER.ZAHLUNGSDATEN_KundenID
AND NUTZER.Nutzungsstunden > 2000;

Fußballhelden

Auf der Seite DBup2date der Universität Bayreuth ist eine Datenbank zur deutschen Bundesliga, mit der man Abfragen üben kann.
Öffne einen neuen Tab und gehe auf die Seite https://dbup2date.uni-bayreuth.de/bundesliga.html.
Oben auf der Seite siehst du ein Datenbankschema, indem Schlüssel unterstrichen und Fremdschlüssel überstrichen sind.
Darunter ist ein Editor, indem du entweder die SQL Abfrage schreiben kannst oder graphisch mit Bausteinen die SQL Abfragen zusammenbauen kannst.
Zum Warmwerden 1: Gib die Namen aller Vereine aus.
Suche den Namen und das Land der Spieler heraus, die zwischen 20 und 25 Spiele gespielt haben.

Für diese Aufgabe benötigst Du folgendes Grundwissen: Einführung zu SQL

Du kannst mit AND zwei Bedingungen verknüpfen, die gleichzeitig gelten sollen.
Unter anderem mit < und > kannst du Zahlwerte vergleichen.
SELECT Spieler_Name,  Land
FROM Spieler 
WHERE Spiele < 25 
AND Spiele > 20;
Verbinde die Informationen, die es in der Tabelle Spieler gibt mit den Informationen der zugehörigen Vereine und gib alles aus.

Für diese Aufgabe benötigst Du folgendes Grundwissen: Abfragen über mehrere Tabellen

Du bildest einen natürlichen Verbund aus Spieler und Verein, indem du den Fremdschlüssel Vereins_ID in Spieler mit dem Schlüssel V_ID in Verein vergleichst:
SELECT *
FROM Spieler, Verein
WHERE V_ID=Vereins_ID;
Gib den Namen und die Trikotnummer aller Spieler aus, die beim FC Bayern München spielen

Für diese Aufgabe benötigst Du folgendes Grundwissen: Abfragen über mehrere Tabellen

Es werden nicht mehr alle Daten ausgegeben, sondern nur noch die Trikot_Nr und der Spieler_Name.
Neben dem Vergleich der Schlüssel, um den natürlichen Verbund zu bilden, muss auch noch der Vereinsname überprüft werden:
SELECT Spieler_Name, Trikot_Nr
From Verein, Spieler
Where V_ID=Vereins_ID 
AND Name ="FC Bayern München"
Gib Für alle Auswärtsspiele aller Vereine (Spiele als Gast) den Name des Vereins, die Tore der Heimmannschaft und die Tore der Gastmannschaft an, wenn die Gastmannschaft mindestens ein Tor mehr geschossen hat als die Heimmannschaft.

Für diese Aufgabe benötigst Du folgendes Grundwissen: Abfragen über mehrere Tabellen

Ausgegeben werden soll der Name aus der Tabelle Verein und die Tore_Heim und Tore_Gast aus der Tabelle Spiel.
Verein und Spieler sind die beiden beteiligten Tabellen.
Den natürlichen Verbund der beiden Tabellen bildet man mit Gast=V_ID.
Zusätzlich soll die Gastmannschaft noch mehr Tore geschossen haben, als die Heimmannschaft, also Tore_Gast > Tore_Heim
Select Name, Tore_Heim, Tore_Gast
From Spiel, Verein
Where Gast=V_ID
AND Tore_Gast > Tore_Heim;
Gegeben ist folgendes Datenbankschema:
Datenbankschema Streaming Datenbank
Gib eine SQL-Abfrage an, die zu jedem Eintrag in der Tabelle angeschaut die Informationen aus der Tabelle FILM verknüpft.

Für diese Aufgabe benötigst Du folgendes Grundwissen: Abfragen über mehrere Tabellen

Du möchtest alle Informationen:
SELECT *
Aus den Tabellen angeschaut und FILM:
FROM angeschaut, FILM
Aber nur die Paare, in denen der Fremdschlüssel in angeschaut und der Schlüssel in FILM identisch sind:
WHERE FILM.FilmID = angeschaut.FilmID
Insgesamt also:
SELECT *
FROM angescchaut, FILM
WHERE FILM.FilmID = angeschaut.FilmID;
Gib eine SQL-Abfrage an, die zu jedem Eintrag in der Tabelle angeschaut die Informationen aus der Tabelle NUTZER verknüpft.

Für diese Aufgabe benötigst Du folgendes Grundwissen: Abfragen über mehrere Tabellen

Die Abfrage ist analog zu der in Teilaufgabe a):
SELECT *
FROM angeschaut, NUTZER
WHERE angeschaut.UserID = NUTZER.UserID;
Abfragen können über beliebig viele Tabellen erfolgen. Kombiniere die Abfragen aus Teilaufgabe a) und b), um zu jedem Eintrag in der Tabelle angeschaut die zugehörigen Infos zu Nutzer und Film zu bekommen.

Für diese Aufgabe benötigst Du folgendes Grundwissen: Abfragen über mehrere Tabellen

Trenne die Tabellen im FROM-Teil durch ein Komma voneinander.
Mehrere Bedingungen, die gleichzeitig gelten sollen, werden mit AND verknüpft. Vergleiche jeweils die Schlüssel:
SELECT *
FROM angeschaut, NUTZER, FILM
WHERE angeschaut.UserID = NUTZER.UserID
AND angeschaut.FilmID = FILM.FilmID;
Die Ergebnistabelle hat alle Spalten aller drei Tabellen FILM, NUTZER und angeschaut.
Entwickle die Anfrage aus Teilaufgabe c) so weiter, dass nur die Nutzungsstunden ausgegeben werden und auch nur dann, wenn die Person den Film "Captain America" geschaut hat.
Es werden nicht mehr alle Spalten in der Ausgabe benötigt, sondern nur noch die Nutzungsstunden.
Eine weitere Bedingung wird mit AND ergänzt und überprüft, dass der Titel "Captain America" ist:
SELECT Nutzungsstunden
FROM angeschaut, NUTZER, FILM
WHERE angeschaut.UserID = NUTZER.UserID
AND angeschaut.FilmID = FILM.FilmID
AND FILM.Titel = "Captain America";
Überlege dir mindestens drei Gründe, warum die Marketingabteilung nur die Nutzungsstunden haben möchte und nicht die anderen Informationen zu Nutzer oder Film.
  • Übersichtlichkeit: Tabellen mit vielen Spalten sind schwerer zu handhaben und zu lesen
  • Datenschutz: Über die KundenID kann auf die reale Person geschlossen werden
  • Nutzen: Um ihre Hypothese zu testen, benötigen sie keine weiteren Informationen über die Nutzer oder den Film.
  • Redundanzen: Die Informationen über den Film wären in allen Datensätzen identisch.

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:
Pizza mit Belag
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!

Für diese Aufgabe benötigst Du folgendes Grundwissen: Abfragen über mehrere Tabellen

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_mit
Damit 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.
Schauspieler und Filme
Es gibt die Tabellen FILM, SCHAUSPIELER und spielt_in
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.
Spieler und Onlinespiel

Für diese Aufgabe benötigst Du folgendes Grundwissen: Abfragen über mehrere Tabellen

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.
Kommentieren Kommentare