\documentclass{bschlangaul-aufgabe} \bLadePakete{rmodell,syntax} \begin{document} \bAufgabenMetadaten{ Titel = {SQL}, Thematik = {Gebrauchtwagen}, Referenz = 66116-2012-F.T1-TA1-A3, RelativerPfad = Examen/66116/2012/03/Thema-1/Teilaufgabe-1/Aufgabe-3.tex, ZitatSchluessel = examen:66116:2012:03, BearbeitungsStand = mit Lösung, Korrektheit = unbekannt, Ueberprueft = {unbekannt}, Stichwoerter = {SQL, SQL mit Übungsdatenbank}, EinzelpruefungsNr = 66116, Jahr = 2012, Monat = 03, ThemaNr = 1, TeilaufgabeNr = 1, AufgabeNr = 3, } \let\a=\bAttribut \let\f=\bFremd \let\p=\bPrimaer \let\r=\bRelationMenge \begin{liRelationenSchemaFormat} Fahrzeug ( MNR[Modell] {INTEGER}, FZGNR* {char(12)}, Baujahr {INTEGER}, KMStand {INTEGER}, Preis {INTEGER} ) Modell ( MNR* {INTEGER}, HNR[Hersteller] {INTEGER}, Typ {char(20)}, Neupreis {INTEGER}, ps {INTEGER} ) Hersteller ( HNR* {INTEGER}, Name {char(20)} ) \end{liRelationenSchemaFormat} \noindent Gegeben sei das folgende Relationenschema:\index{SQL} \footcite{examen:66116:2012:03} \begin{bRelationenModell} \r{Fahrzeug}{\f{MNR[Modell]}, \p{FZGNR}, Baujahr, KMStand, Preis} \r{Modell}{\p{MNR}, \f{HNR[Hersteller]}, Typ, Neupreis, ps} \r{Hersteller}{\p{HNR}, Name} \end{bRelationenModell} \begin{bAdditum}[Übungsdatenbank] % Datenbankname: gebrauchtwagen \begin{minted}{sql} CREATE TABLE Hersteller ( HNR INTEGER PRIMARY KEY, Name CHAR(20) ); CREATE TABLE Modell ( MNR INTEGER PRIMARY KEY, HNR INTEGER REFERENCES Hersteller(HNR), Typ CHAR(20), Neupreis INTEGER, ps INTEGER ); CREATE TABLE Fahrzeug ( MNR INTEGER REFERENCES Modell(MNR), FZGNR CHAR(12) PRIMARY KEY, Baujahr INTEGER, KMStand INTEGER, Preis INTEGER ); INSERT INTO Hersteller VALUES (1, 'BMW'), (2, 'VW'), (3, 'Daimler'); INSERT INTO Modell VALUES (1, 1, '1er', 30134, 122), (2, 1, '2er', 42134, 180), (3, 2, 'Gold', 19278, 90); INSERT INTO Fahrzeug VALUES (1, 1, 2010, 60134, 11154), (2, 2, 2017, 82134, 19130), (3, 3, 2002, 119278, 9278); \end{minted} \index{SQL mit Übungsdatenbank} \end{bAdditum} Dabei sind die Schlüsselattribute jeweils unterstrichen und zusätzlich für alle Attribute die Typen angegeben. Formulieren Sie die folgenden Anfragen bzw. Anweisungen in SQL. \begin{enumerate} %% % a) %% \item Geben Sie die Anweisungen in SQL-DDL an, die notwendig sind, um die Relationen „Fahrzeug“, „Modell“ und „Hersteller“ zu erzeugen. Achten Sie dabei darauf, die Primärschlüssel der Relationen zu kennzeichnen. \begin{bAntwort} \begin{minted}{sql} CREATE TABLE IF NOT EXISTS Hersteller ( HNR INTEGER PRIMARY KEY, Name CHAR(20) ); CREATE TABLE IF NOT EXISTS Modell ( MNR INTEGER PRIMARY KEY, HNR INTEGER REFERENCES Hersteller(HNR), Typ CHAR(20), Neupreis INTEGER, ps INTEGER ); CREATE TABLE IF NOT EXISTS Fahrzeug ( MNR INTEGER REFERENCES Modell(MNR), FZGNR CHAR(12) PRIMARY KEY, Baujahr INTEGER, KMStand INTEGER, Preis INTEGER ); \end{minted} \end{bAntwort} %% % b) %% \item Bestimmen Sie die Typen aller Modelle des Herstellers mit Namen BMW. \begin{bAntwort} \begin{minted}{sql} SELECT m.Typ FROM Modell m, Hersteller h WHERE h.HNR = m.HNR AND h.Name = 'BMW' GROUP BY m.Typ; \end{minted} \end{bAntwort} %% % c) %% \item Bestimmen Sie den Mindestpreis, bezogen auf das Attribut „Preis“, der Fahrzeuge eines jeden Herstellers. \begin{bAntwort} \begin{minted}{sql} SELECT h1.Name AS Hersteller, ( SELECT MIN(f.Preis) FROM Fahrzeug f, Modell m, Hersteller h2 WHERE f.MNR = m.MNR AND m.HNR = h2.HNR AND H2.HNR = h1.HNR ) AS Mindestpreis FROM Hersteller h1; \end{minted} \end{bAntwort} %% % d) %% \item Bestimmen Sie die Namen der Hersteller, für die von jedem ihrer Modelle mindestens ein Fahrzeug in der Datenbank gespeichert ist. \begin{bAntwort} \begin{minted}{sql} SELECT h.Name AS Hersteller FROM Fahrzeug f, Modell m, Hersteller h WHERE f.MNR = m.MNR AND m.HNR = h.HNR GROUP BY h.Name; \end{minted} \end{bAntwort} %% % e) %% \item Bestimmen Sie die Namen aller Hersteller, von denen mindestens fünf Fahrzeuge eines beliebigen Modells in der Datenbank gespeichert sind. \end{enumerate} \end{document}