\documentclass{bschlangaul-aufgabe}
\bLadePakete{syntax,mathe}
\begin{document}
\bAufgabenMetadaten{
  Titel = {1. Relationale Anfragesprachen},
  Thematik = {Computer „Chiemsee“},
  Referenz = 46116-2015-F.T1-TA2-A1,
  RelativerPfad = Examen/46116/2015/03/Thema-1/Teilaufgabe-2/Aufgabe-1.tex,
  ZitatSchluessel = examen:46116:2015:09,
  BearbeitungsStand = mit Lösung,
  Korrektheit = unbekannt,
  Ueberprueft = {unbekannt},
  Stichwoerter = {Relationale Algebra, SQL, GROUP BY, HAVING},
  EinzelpruefungsNr = 46116,
  Jahr = 2015,
  Monat = 03,
  ThemaNr = 1,
  TeilaufgabeNr = 2,
  AufgabeNr = 1,
}

Gegeben\index{Relationale Algebra} \footcite{examen:46116:2015:09} sei
folgendes relationales Schema, dessen Attribute nur atomare
Attributwerte besitzen.
\footcite{db:ab:2}

Computer: \{IP, Name, Hersteller, Modell, Standort\}

\begin{enumerate}

%%
% 1.
%%

\item Geben Sie für die folgenden Anfragen einen relationalen Ausdruck
an:

\begin{enumerate}

%%
% (a)
%%

\item Geben Sie die IP-Adresse des Computers mit Namen „Chiemsee“ aus.

\begin{bAntwort}
$\pi_{\text{IP}}(\sigma_{\text{Name} = \text{Chiemsee}}(\text{Computer}))$
\end{bAntwort}

%%
% (b)
%%

\item Geben Sie 2er-Tupel von IP-Adressen der Computer am selben
Standort aus.

\begin{bAntwort}
\begin{multline*}
\pi_{\text{c1.IP},\text{c2.IP}}(
  \sigma_{\text{c1.Standort} = \text{c2.Standort}}(\\
    \rho_{\text{c1}} (\text{Computer})
    \times
    \rho_{\text{c2}} (\text{Computer})
  )
)
\end{multline*}
\end{bAntwort}
\end{enumerate}

%%
% (2)
%%

\item Formulieren Sie die folgenden Anfragen in SQL\index{SQL}:

\begin{enumerate}

%%
% (a)
%%

\item Geben Sie die IP-Adressen der Rechner am Standort „Büro2“ aus.

\begin{bAntwort}
\begin{minted}{sql}
SELECT IP FROM Computer WHERE Standort = 'Büro2';
\end{minted}
\end{bAntwort}

%%
% (b)
%%

\item Geben Sie alle Computer-Namen in aufsteigender Ordnung mit ihren
IP-Adressen aus.

\begin{bAntwort}
\begin{minted}{sql}
SELECT Name, IP FROM Computer ORDER BY Name ASC;
\end{minted}
\end{bAntwort}

%%
% (c)
%%

\item Geben Sie für jeden Hersteller die Anzahl der unterschiedlichen
Modelle aus.

\begin{bAntwort}
\begin{minted}{sql}
SELECT COUNT(DISTINCT Modell), Hersteller
FROM Computer
GROUP BY Hersteller;
\end{minted}
\end{bAntwort}

%%
% (d)
%%

\item Geben Sie für jeden Hersteller, welcher mindestens 2
unterschiedliche Modelle hat, die Anzahl der unterschiedlichen Modelle
aus.\index{GROUP BY}\index{HAVING}

\begin{bAntwort}
\begin{minted}{sql}
SELECT Hersteller, COUNT(*) FROM Modelle GROUP BY Hersteller HAVING COUNT(*) > 1;
\end{minted}
\end{bAntwort}

oder

\begin{bAntwort}
\begin{minted}{sql}
SELECT COUNT(DISTINCT Modell), Hersteller
FROM Computer
GROUP BY Hersteller
HAVING COUNT(DISTINCT Modell) >= 2;
\end{minted}
\end{bAntwort}
\end{enumerate}
\end{enumerate}

\begin{minted}{sql}
-- AB 2 Einstieg Sql

-- Aufgabe 3: SQL-Anfragen auf einer Tabelle & Relationale Algebra

-- sudo mysql  < Computer.sql
-- DROP DATABASE IF EXISTS Computer;
-- CREATE DATABASE Computer;
-- USE Computer;

CREATE TABLE Computer (
    IP VARCHAR(15) PRIMARY KEY NOT NULL,
    Name VARCHAR(30),
    Hersteller VARCHAR(30),
    Modell VARCHAR(30),
    Standort VARCHAR(30)
);

INSERT INTO Computer VALUES ('10.11.12.1', 'Chiemsee', 'HP', 'Spectre', 'Büro1');
INSERT INTO Computer VALUES ('10.11.12.2', 'Computer2', 'HP', 'Elite', 'Büro1');
INSERT INTO Computer VALUES ('10.11.12.3', 'Computer3', 'HP', 'Spectre', 'Büro1');
INSERT INTO Computer VALUES ('10.11.12.4', 'Computer4', 'HP', 'Elite', 'Büro1');
INSERT INTO Computer VALUES ('10.11.12.5', 'Computer5', 'HP', 'Spectre', 'Büro1');
INSERT INTO Computer VALUES ('10.11.12.6', 'Computer6', 'HP', 'Elite', 'Büro1');
INSERT INTO Computer VALUES ('10.11.12.7', 'Computer7', 'HP', 'Envy', 'Büro1');
INSERT INTO Computer VALUES ('10.11.12.8', 'Computer8', 'DELL', 'G3', 'Büro2');
INSERT INTO Computer VALUES ('10.11.12.9', 'Computer9', 'DELL', 'G7', 'Büro2');
INSERT INTO Computer VALUES ('10.11.12.10', 'Computer10', 'DELL', 'Latitude', 'Büro2');
INSERT INTO Computer VALUES ('10.11.12.11', 'Computer11', 'DELL', 'Alienware', 'Büro2');
INSERT INTO Computer VALUES ('10.11.12.12', 'Computer12', 'DELL', 'Inspirion', 'Büro2');
INSERT INTO Computer VALUES ('10.11.12.13', 'Computer13', 'DELL', 'XPS', 'Büro2');
INSERT INTO Computer VALUES ('10.11.12.14', 'Computer14', 'Apple', 'MacBook Air', 'Büro2');
INSERT INTO Computer VALUES ('10.11.12.15', 'Computer15', 'Apple', 'MacBook Air', 'Büro2');
INSERT INTO Computer VALUES ('10.11.12.16', 'Computer16', 'Apple', 'MacBook Air', 'Büro3');
INSERT INTO Computer VALUES ('10.11.12.17', 'Computer17', 'Apple', 'MacBook Air', 'Büro3');
INSERT INTO Computer VALUES ('10.11.12.18', 'Computer18', 'Apple', 'MacBook Air', 'Büro3');
INSERT INTO Computer VALUES ('10.11.12.19', 'Computer19', 'Apple', 'MacBook Air', 'Büro3');
INSERT INTO Computer VALUES ('10.11.12.20', 'Computer20', 'Apple', 'MacBook Air', 'Büro3');
INSERT INTO Computer VALUES ('10.11.12.21', 'Computer21', 'Apple', 'MacBook Air', 'Büro3');
INSERT INTO Computer VALUES ('10.11.12.22', 'Computer22', 'Apple', 'MacBook Air', 'Büro3');
INSERT INTO Computer VALUES ('10.11.12.23', 'Computer23', 'Apple', 'MacBook Air', 'Büro3');
\end{minted}

\end{document}
