Hi,
ich kenne mich mit Fluglizenzen auch nicht aus, aber unabhängig davon wird in Aufgabe 1 explizit gesagt ein Pilot hat mindestens 1 Fluglizenz, also 1 oder mehrere. Da nichts weiter bekannt ist, gehe ich erst einmal davon aus, dass er beliebig viele haben kann, die jeweils für eine beliebige Reichweite gelten. So ist es zumindest modelliert/beschrieben. Ob es nur genau 1 Lizenz für Langstrecke gibt wird nicht gesagt, weshalb man davon auch nicht einfach ausgehen sollte - in der Realen Welt würde man den Sachverhalt einfach im Gespräch aufklären

. Das Datenmodell erlaubt also erst einmal beliebig viele Lizenzen. Die Entfernung dient als Kriterium zur Unterscheidung in kurz/mittel/lang mehr nicht. Ein Pilot könnte also den Angaben zufolge auch mehrere Langstreckenlizenzen besitzen - für 3500, 8000 und 10000 km.. - was auch immer.
Die Aufgabenstellung ist gelinde gesagt bescheiden konkret - Erstens Fehlerhafter Text (sehe keine Adresse als relation), zweitens unsinnig modelliert, da ein Pilot mit mehreren Lizenzen auch mehrere Pilotennummern erhielte. Das würde man so wohl eher nicht modellieren siehe Normalisierung. Für einen Kurs über Datenbankmodellierung aus meiner Sicht ein eher schwaches Beispiel.
Was auch unsinnig scheint:auf die hier modellierte Art wäre es auch möglich, dass ein Mitarbeiter, der Pilot ist, auch mehrere Rangbezeichnungen erhielte- erscheint mir auch nicht sinnvoll - werde das evtl. auch nochmal im offiziellen Forum anmeckern, da mir die Aufgabenstellung mit den ganzen Unklarheiten ein bisschen auf den Keks geht. Das sich die Betreuung dann in der "heißen Phase" auch noch ohne Vertretung abmeldet finde ich traurig - so lassen sich die Fragen nicht wirklich klären.
naja... genug aufgeregt...
Im SQL-Server sieht das etwa so aus - man ersetze ggf. die Aliases durch die vollen Relationenbezeichner, dann müsste es passen:
SELECT m.Nachname
, m.Vorname
, MAX(fl.maxStrecke) as 'MaxReichweite'
FROM Mitarbeiter as m
, Pilot as p
, Fluglizenz as fl
WHERE p.MitarbeiterNummer = m.MitarbeiterNummer
AND fl.FluglizenzNummer = p.FluglizenzNummer
AND m.Geburtsdatum < '1962-01-01' (<-- Anführungszeichen benötigt der SQL-Server)
GROUP BY m.Nachname
, m.Vorname
, m.MitarbeiterNummer (<-- falls 2 Piloten gleichen Vor UND Nachnamen haben erhielte man ein falsches Ergebnis, da nur einer der beiden - der mit der "höherwertigen" Fluglizenz - im Ergebnis auftauchen würde, deshalb auch nach Mitarbeiternummer gruppieren. Die Gruppiereung nach Nach- und Vorname erfordert der SQL-Server wegen der Aggregatsfunktion (muss darin ausgeschrieben werden. Möglicherweise kann man die in der FU-Schreibweise auch weglassen - (meine das im Script so gesehen zu haben) und nur nach Mitarbeiternummer als Uniqe Key gruppieren, das sollte dann eindeutig sein.)
HAVING MAX(fl.maxStrecke) > 3500
ORDER BY m.Nachname DESC, m.Vorname DESC (<-- Sortierung nach Vorname nicht gefordert aber wohl sinnvoll bei Namensgleichheit)
Um bei Namnsgleichheit von Vor UND Nachname im Ergebnis auch die beiden Mitarbeiter direkt unterscheiden zu können sollte man eigentlich auch noch die Mitarbeiternummer mit ausgeben.
Habe das Ganze gegen eine kleine Dummy-DB (SQL-Server 2014) getestet - liefert das korrekte Ergebnis.
Schade die hübsche Formatierung geht leider verloren - die Kommentare gehören natürlich nicht ins Statement

)
Grüße,
Christoph