\documentclass{bschlangaul-aufgabe}
\bLadePakete{syntax,mathe}
\begin{document}
\bAufgabenMetadaten{
  Titel = {Aufgabe 3: Staatsexamen Herbst 1996, Aufgabe 4},
  Thematik = {Gebrauchtwagen},
  Referenz = 66111-1996-H.A4,
  RelativerPfad = Examen/66111/1996/09/Aufgabe-4.tex,
  ZitatSchluessel = db:ab:7,
  ZitatBeschreibung = {Aufgabe 3},
  BearbeitungsStand = mit Lösung,
  Korrektheit = unbekannt,
  Ueberprueft = {unbekannt},
  Stichwoerter = {Dritte Normalform, Relationale Algebra, SQL, GROUP BY},
  EinzelpruefungsNr = 66111,
  Jahr = 1996,
  Monat = 09,
  AufgabeNr = 4,
}

Gegeben\footcite[Aufgabe 3]{db:ab:7} sei die folgende, in dritter
Normalform\index{Dritte Normalform} vorliegende relationale Datenbank
zur Modellierung des Gebrauchtwagenparks eines Autohändlers.
\footcite[Aufgabe 4 Seite 3-4]{examen:66111:1996:09}

Die Relation Modelle beinhaltet alle Fahrzeugtypen, die der Händler im
Gebrauchtwagenprogramm führt. Die Modelle sind über das Attribut „mnr“
über alle Hersteller hinweg eindeutig nummeriert. „mnr“ ist daher
Primärschlüssel in der Relation Modelle. Über das Attribut „hnr“ wird
von Modelle auf die Relation Hersteller verwiesen. In der Relation
Fahrzeuge werden alle tatsächlich beim Händler am Lager befindlichen
Fahrzeuge geführt. Über „mnr“ wird von Fahrzeuge auf Modelle verwiesen.
Bei gegebener Modellnummer ist die vergebene Fahrgestellnummer („fgnr“)
eindeutig. Darum bilden „mnr“ und „fgnr“ zusammen den Primärschlüssel
der Relation Fahrzeuge.

\begin{itemize}

%%
%
%%

\item Formulieren Sie folgende Anfragen jeweils in relationaler
Algebra\index{Relationale Algebra} und SQL\index{SQL}!

\begin{enumerate}

%%
% (a)
%%

\item Bestimmen Sie alle Modelle mit mehr als 60 PS

\begin{bAntwort}
\bPseudoUeberschrift{Relationale Algebra}
$\pi_{mnr}(\sigma_{ps > 60}(Modelle))$

\bPseudoUeberschrift{SQL}
\begin{minted}{sql}
SELECT mnr FROM Modelle WHERE ps > 60;
\end{minted}
\end{bAntwort}

%%
% (b)
%%

\item Bestimmen Sie die Typen aller Modelle des Herstellers VW.

\begin{bAntwort}
\bPseudoUeberschrift{Relationale Algebra}

$\pi_{typ}(Modelle \bowtie \sigma_{hersteller = \mlq vw \mrq}
(Hersteller))$

oder

$\pi_{typ}(\sigma_{hersteller = \mlq vw \mrq}(Modelle \bowtie
Hersteller))$

\bPseudoUeberschrift{SQL}
\begin{minted}{sql}
SELECT m.typ
FROM Modelle m, Hersteller h
WHERE h.hnr = m.hnr AND
h.hersteller = 'VV';
\end{minted}
\end{bAntwort}

%%
% (c)
%%

\item Bestimmen Sie die Nummern aller Modelle des Herstellers Opel, von
denen tatsächlich Fahrzeuge auf Lager sind

\begin{bAntwort}
\bPseudoUeberschrift{Relationale Algebra}

$\pi_{mnr}(
  Fahrzeuge \bowtie (
    Modelle \bowtie \sigma_{hersteller = \mlq Opel \mrq}(Hersteller)
  )
)$

\bPseudoUeberschrift{SQL}
\begin{minted}{sql}
SELECT DISTINCT m.mnr
FROM Modelle m, Hersteller h, Fahrzeuge f
WHERE f.mnr = m.mnr AND m.hnr = h.hnr AND h.hersteller = 'Opel';
\end{minted}
\end{bAntwort}

\end{enumerate}

%%
%
%%

\item Formulieren Sie folgende Anfrage nur in SQL! Bestimmen Sie die
Namen der Hersteller, für deren sämtliche Modelle mindestens ein
Fahrzeug im aktuellern Bestand vorhanden ist.

%%
%
%%

\item Formulieren Sie folgende SQL-Anfrage umgangssprachlich, aber
exakt!\index{GROUP BY}

\begin{minted}{sql}
SELECT AVG(neupreis), hnr
FROM Modelle
GROUP BY hnr;
\end{minted}

\end{itemize}
\end{document}
