\documentclass{bschlangaul-aufgabe} \bLadePakete{sql} \begin{document} \bAufgabenMetadaten{ Titel = {Aufgabe 5}, Thematik = {App für konfizierte Schüler-Smartphones}, Referenz = 66116-2019-F.T2-TA1-A5, RelativerPfad = Examen/66116/2019/03/Thema-2/Teilaufgabe-1/Aufgabe-5.tex, ZitatSchluessel = examen:66116:2019:03, BearbeitungsStand = mit Lösung, Korrektheit = unbekannt, Ueberprueft = {unbekannt}, Stichwoerter = {SQL}, EinzelpruefungsNr = 66116, Jahr = 2019, Monat = 03, ThemaNr = 2, TeilaufgabeNr = 1, AufgabeNr = 5, } Wir betrachten erneut das gegebene Schema aus Aufgabe 4. Primärschlüssel sind unterstrichen, Fremdschlüssel sind überstrichen und der Text in den darauf folgenden eckigen Klammern benennt die Relation, auf die verwiesen wird. \index{SQL} \footcite{examen:66116:2019:03} Der Notenschnitt, der Preis und die Bewertung werden als Kommazahl dargestellt, wobei die Bewertung die Anzahl der Sterne angibt, also maximal 5 und mindestens 0. Die Modellnummer kann sowohl aus Zahlen und Buchstaben bestehen, ist jedoch nie länger als 50 Zeichen. ID, RAM, Bildschirmdiagonale und Datum sind ganze Zahlen. Die restlichen Attribute sind Strings der Länge 15. Lehrer (Name, Fachl, Fach2, Fach3) Schüler (Vorname, Nachname, Notenschnitt) Smartphone (ID, Modellnr, RAM, Bildschirmdiagonale) App (Name, Bewertung, Preis) Eingesammelt (Vorname [Schüler], Nachname [Schüler], Name [Lehrer], ID [Smartphone], Datum) Installiert (ID [Smartphone], Name [App]) \begin{enumerate} %% % a) %% \item Geben Sie die Anweisung in SOL-DDL an, die notwendig ist, um die Relation ’App’ zu erzeugen. \begin{bAntwort} \begin{minted}{sql} CREATE TABLE App( Name VARCHAR(50) PRIMARY KEY, Bewertung VARCHAR(255), Preis INTEGER); \end{minted} \end{bAntwort} %% % b) %% \item Geben Sie die Anweisung in SOL-DDL an, die notwendig ist, um die Relation ’Installiert’ zu erzeugen. \begin{bAntwort} \begin{minted}{sql} CREATE TABLE Installiert( ID INTEGER REFERENCES Smartphone(ID), Name VARCHAR(50) App(Name), PRIMARY KEY(ID,Name)); \end{minted} \end{bAntwort} %% % c) %% \item Formulieren Sie die folgende Anfrage in SQL: Gesucht sind die Namen der Apps zusammen mit ihrer Bewertung, die auf den Smartphones installiert sind, die Lehrer Keating eingesammelt hat. Sortieren Sie das Ergebnis nach Bewertung absteigend. Hinweis: Achten Sie auf gleichnamige Attribute. \begin{bAntwort} \begin{minted}{sql} SELECT DISTINCT a.Name, a.Bewertung FROM Eingesammelt e, Installiert i, App a WHERE e.ID =i.ID AND i.Name = a.Name AND e.Name = "Keating" ORDER BY a.Bewertung DESC; \end{minted} \end{bAntwort} %% % d) %% \item Formulieren Sie die folgende Anfrage in SQL: Gesucht ist der durchschnittliche Notenschnitt der Schüler, denen ein iPhone 65 abgenommen wurde. Ein iPhone 6s kann A1633 als Modellnummer haben oder A1688. \begin{bAntwort} \begin{minted}{sql} SELECT DISTINCT AVG(s.Notenschnitt) FROM Schüler s, Eingesammelt e, Smartphone sm WHERE s.Vorname = e.Vorname AND s.Nachname = e.Nachname AND e.ID=sm.ID AND(sm.Modellnr = 'A1633' OR sm.Modellnr = 'A1688'); \end{minted} \end{bAntwort} %% % e) %% \item Formulieren Sie die folgende Anfrage in SQL: Gesucht ist die Modellnummer der Smartphones, die durchschnittlich die meisten Apps installiert haben. Tipp: Die Verwendung von Views kann die Aufgabe vereinfachen. \begin{bAntwort} \begin{minted}{sql} CREATE VIEW NumberApps AS SELECT s.ID, s.Modellnr, COUNT(i.Name) AS number FROM Smartphone s, Installiert i WHERE s.ID = i.ID GROUP BY s.ID SELECT ModellNr, AVG(number) FROM NumberApps GROUP BY ModellNr \end{minted} \end{bAntwort} \end{enumerate} \end{document}