\documentclass{bschlangaul-aufgabe} \bLadePakete{syntax} \begin{document} \bAufgabenMetadaten{ Titel = {6. Relationale Anfragen in SQL}, Thematik = {Fluginformationssystem}, Referenz = 66116-2017-H.T1-TA1-A6, RelativerPfad = Examen/66116/2017/09/Thema-1/Teilaufgabe-1/Aufgabe-6.tex, ZitatSchluessel = examen:66116:2017:09, BearbeitungsStand = mit Lösung, Korrektheit = unbekannt, Ueberprueft = {unbekannt}, Stichwoerter = {SQL, SQL mit Übungsdatenbank, Top-N-Query}, EinzelpruefungsNr = 66116, Jahr = 2017, Monat = 09, ThemaNr = 1, TeilaufgabeNr = 1, AufgabeNr = 6, } Folgende Tabellen veranschaulichen eine Ausprägung eines Fluginformationssystems: \index{SQL} \footcite{examen:66116:2017:09} \bPseudoUeberschrift{Flughäfen} \begin{tabular}{lll} Code & Stadt & Transferzeit (min)\\ LHR & London & 30\\ LGW & London & 20\\ JFK & New York City & 60\\ EWR & New York City & 35\\ MUC & München & 30\\ FRA & Frankfurt & 45\\ \end{tabular} \bPseudoUeberschrift{Verbindungen} \begin{tabular}{llllll} ID & Von & Nach & Linie & Abflug (MEZ) & Ankunft (MEZ)\\ 410 & MUC & FRA & LH & 2016-02-24 07:00:00 & 2016-02-24 08:10:00\\ 411 & MUC & FRA & LH & 2016-02-24 08:00:00 & 2016-02-24 09:10:00\\ 412 & FRA & JFK & LH & 2016-02-24 10:50:00 & 2016-02-24 19:50:00 \\ \end{tabular} \bPseudoUeberschrift{Hinweise} \begin{itemize} \item Formulieren Sie alle Abfragen in SQL-92 (insbesondere sind LIMIT, TOP, FETCH FIRST, ROWNUM und dergleichen nicht erlaubt). \item Alle Datum/Zeit-Angaben erlauben arithmetische Operationen, beispielsweise wird bei der Operation \texttt{ankunf} + \texttt{transferzeit} die \texttt{transferzeit} auf den Zeitstempel \texttt{ankunft} addiert. \item Es müssen keine Zeitverschiebungen berücksichtigt werden. Alle Zeitstempel sind in MEZ. \end{itemize} % Datenbankname: fluginformationssystem \begin{minted}{sql} CREATE TABLE Flughaefen ( Code VARCHAR(3) PRIMARY KEY, Stadt VARCHAR(20), Transferzeit integer ); CREATE TABLE Verbindungen ( ID integer PRIMARY KEY, Von VARCHAR(3) REFERENCES Flughaefen(Code), Nach VARCHAR(3) REFERENCES Flughaefen(Code), Linie VARCHAR(20), Abflug timestamp, Ankunft timestamp ); INSERT INTO Flughaefen VALUES ('LHR', 'London', 30), ('LGW', 'London', 20), ('JFK', 'New York City', 60), ('EWR', 'New York City', 35), ('MUC', 'München', 30), ('FRA', 'Frankfurt', 45); INSERT INTO Verbindungen VALUES (410, 'MUC', 'FRA', 'LH', '2016-02-24 07:00:00', '2016-02-24 08:10:00'), (411, 'MUC', 'FRA', 'LH', '2016-02-24 08:00:00', '2016-02-24 09:10:00'), (412, 'FRA', 'JFK', 'LH', '2016-02-24 10:50:00', '2016-02-24 19:50:00'), (413, 'MUC', 'LHR', 'LH', '2016-02-24 10:00:00', '2016-02-24 12:10:00'), (414, 'MUC', 'LGW', 'LH', '2016-02-24 11:00:00', '2016-02-24 13:20:00'), (415, 'MUC', 'LHR', 'LH', '2016-02-24 12:00:00', '2016-02-24 14:00:00'); \end{minted} \index{SQL mit Übungsdatenbank} \begin{enumerate} %% % 1. %% \item Ermitteln Sie die Städte, in denen es mehr als einen Flughafen gibt. \begin{bAntwort} \begin{minted}{sql} SELECT Stadt FROM Flughaefen GROUP BY Stadt HAVING count(Stadt) > 1; \end{minted} \end{bAntwort} %% % 2. %% \item Ermitteln Sie die Städte, in denen man mit der Linie „LH“ an mindestens zwei verschiedenen Flughäfen landen kann. \begin{bAntwort} \begin{minted}{sql} SELECT Stadt FROM Flughaefen WHERE Stadt IN ( SELECT Stadt FROM Flughaefen, Verbindungen WHERE Code = Nach AND Linie = 'LH' GROUP BY Stadt ) GROUP BY Stadt HAVING COUNT(Stadt) > 1; \end{minted} \end{bAntwort} %% % 3. %% \item Ermitteln Sie die Flugzeit des kürzesten Direktflugs von München nach London.\index{Top-N-Query} \begin{bAntwort} \begin{minted}{sql} CREATE VIEW Flugdauer AS SELECT ID, Ankunft - Abflug AS Dauer FROM Flughaefen v, Flughaefen n, Verbindungen WHERE n.Code = Nach AND v.Code = Von AND v.Stadt = 'München' AND n.Stadt = 'London'; SELECT a.Dauer FROM Flugdauer a, Flugdauer b WHERE a.Dauer >= b.Dauer GROUP BY a.Dauer HAVING COUNT(*) <= 1; \end{minted} \end{bAntwort} %% % 4. %% \item Ermitteln Sie die kürzeste Roundtrip-Zeit (nur Direktflüge) zwischen den Flughäfen FRA und JFK (Transferzeit am Flughafen JFK beachten). \end{enumerate} \end{document}