\documentclass{bschlangaul-aufgabe}
\bLadePakete{syntax}
\begin{document}
\bAufgabenMetadaten{
  Titel = {Aufgabe 2},
  Thematik = {Musik-CDs},
  Referenz = 66116-2015-F.T1-TA1-A2,
  RelativerPfad = Examen/66116/2015/03/Thema-1/Teilaufgabe-1/Aufgabe-2.tex,
  ZitatSchluessel = examen:66116:2015:03,
  BearbeitungsStand = mit Lösung,
  Korrektheit = unbekannt,
  Ueberprueft = {unbekannt},
  Stichwoerter = {SQL, SQL mit Übungsdatenbank, GROUP BY, MAX, OR, INSERT, UPDATE},
  EinzelpruefungsNr = 66116,
  Jahr = 2015,
  Monat = 03,
  ThemaNr = 1,
  TeilaufgabeNr = 1,
  AufgabeNr = 2,
}

Formulieren Sie in SQL die folgenden Anfragen, Views bzw.
Datenmanipulations-Statements an Teile der Musik-Datenbank aus
Teilaufgabe DB.1:\index{SQL}
\footcite{examen:66116:2015:03}

Interpret (Interpreten\_ID, Name, Bühnenstart, Geschäftsadresse),
CD (CD\_ID, Name, Interpreten\_ID, Erscheinungsdatum),
Musikstück (CD\_ID, Position, Titel, Länge),
Auszeichnung\_CD (CD\_ID, Typ),

Auszeichnung\_Stück (CD\_ID, Position, Typ).

\begin{bAdditum}[Übungsdatenbank]
% Datenbankname: musikcds
\begin{minted}{sql}
CREATE TABLE Interpret (
  Interpreten_ID integer PRIMARY KEY,
  Name VARCHAR(40),
  Bühnenstart date,
  Geschäftsadresse VARCHAR(100)
);

CREATE TABLE CD (
  CD_ID integer PRIMARY KEY,
  Name VARCHAR(20),
  Interpreten_ID integer,
  Erscheinungsdatum date
);

CREATE TABLE Musikstück (
  CD_ID integer,
  Position integer,
  Titel VARCHAR(50),
  Länge integer
);

CREATE TABLE Auszeichnung_CD (
  CD_ID integer,
  Typ VARCHAR(20)
);

CREATE TABLE Auszeichnung_Stück (
  CD_ID integer,
  Position integer,
  Typ VARCHAR(20)
);

INSERT INTO Interpret VALUES
  (1, 'Adele', '2005-01-01', 'London'),
  (2, 'Michael Jackson', '1971-01-01', 'Neverland Ranch'),
  (3, 'Gensis', '1967-01-01', 'Godalming');

INSERT INTO CD VALUES
  (1, 'Adele 19', 1, '2008-01-28'),
  (2, 'Adele 21', 1, '2011-01-19'),
  (3, 'Adele 25', 1, '2015-11-20'),
  (4, 'Thriller', 2, '1982-11-30');

INSERT INTO Musikstück VALUES
  (4, 1, 'Wanna Be Startin’ Somethin’', 363),
  (4, 5, 'Beat It’ Somethin’', 258);

INSERT INTO Auszeichnung_CD VALUES
  (1, 'Gold');

INSERT INTO Auszeichnung_Stück VALUES
  (4, 5, 'Diamant');
\end{minted}
\index{SQL mit Übungsdatenbank}

\end{bAdditum}\begin{enumerate}

%%
% a)
%%

\item Welche CDs hat „Adele“ herausgebracht? Geben Sie die Namen der CDs
aus.

\begin{bAntwort}
\begin{minted}{sql}
SELECT c.Name DISTINICT
FROM CD c, Interpret i
WHERE
  i.Interpreten_ID = c.Interpreten_ID AND
  i.name = 'Adele';
\end{minted}
\end{bAntwort}

%%
% b)
%%

\item Geben Sie für alle Interpreten - gegeben durch die ID und den
Namen - die Anzahl ihrer veröffentlichten CDs an.\index{GROUP BY}

\begin{bAntwort}
\begin{minted}{sql}
SELECT i.Interpreten_ID, i.Name, COUNT(*)
FROM Interpret i, CD c
WHERE
  i.Interpreten_ID = c.Interpreten_ID
GROUP BY i.Interpreten_ID, i.Name;
\end{minted}
\end{bAntwort}

%%
% c)
%%

\item Geben Sie die Länge des längsten Musikstücks auf der CD mit dem
Namen „Thriller“ des Interpreten „Michael Jackson“ an.\index{MAX}

\begin{bAntwort}
\begin{minted}{sql}
SELECT MAX(m.Länge)
FROM Interpret i, CD c, Musikstück m
WHERE
  m.CD_ID = c.CD_ID AND
  i.Name = 'Michael Jackson' AND
  c.Name = 'Thriller';
\end{minted}
\end{bAntwort}

%%
% d)
%%

\item Geben Sie die Namen aller Interpreten aus, die eine Auszeichnung
für eine CD oder eines ihrer Musikstücke bekommen haben.\index{OR}

\begin{bAntwort}
\begin{minted}{sql}
SELECT i.Name
FROM Auszeichnung_CD acd, Auszeichnung_Stück ast, CD c, Interpret i
WHERE
  (acd.CD_ID = c.CD_ID OR ast.CD_ID = c.CD_ID) AND
  c.Interpreten_ID = i.Interpreten_ID;
\end{minted}
\end{bAntwort}

%%
% e)
%%

\item Fügen Sie ein, dass „Adele“ einen „Emmy“ für ihre CD mit dem Namen
„Adele 21“ bekommen hat.\index{INSERT}

\begin{bAntwort}
\begin{minted}{sql}
INSERT INTO Auszeichnung_CD VALUES
  (
    (
      SELECT c.CD_ID
      FROM CD c, Interpret i
      WHERE
        c.Name = 'Adele 21' AND
        i.Interpreten_ID = c.Interpreten_ID AND
        i.Name = 'Adele'
    ),
    'Emmy'
  );

-- Test
SELECT * from Auszeichnung_CD;
\end{minted}
\end{bAntwort}

%%
% f)
%%

\item Ändern Sie die Geschäftsadresse von „Genesis“ auf „Hollywood
Boulevard 13, Los Angeles“.\index{UPDATE}

\begin{bAntwort}
\begin{minted}{sql}
-- Test
SELECT * FROM Interpret;

UPDATE Interpret
SET Geschäftsadresse = 'Hollywood Boulevard 13, Los Angeles'
WHERE Name = 'Gensis';

-- Test
SELECT * FROM Interpret;
\end{minted}
\end{bAntwort}

\end{enumerate}

\end{document}
