\documentclass{bschlangaul-aufgabe} \bLadePakete{syntax} \begin{document} \bAufgabenMetadaten{ Titel = {5. Schemadefinition}, Thematik = {SQL-Syntax-Überprüfung}, Referenz = 66116-2017-H.T1-TA1-A5, RelativerPfad = Examen/66116/2017/09/Thema-1/Teilaufgabe-1/Aufgabe-5.tex, ZitatSchluessel = examen:66116:2017:09, BearbeitungsStand = mit Lösung, Korrektheit = unbekannt, Ueberprueft = {unbekannt}, Stichwoerter = {SQL, CREATE TABLE, DELETE, INSERT, DROP TABLE}, EinzelpruefungsNr = 66116, Jahr = 2017, Monat = 09, ThemaNr = 1, TeilaufgabeNr = 1, AufgabeNr = 5, } Gegeben ist die folgende Definition zweier Tabellen: \index{SQL} \footcite{examen:66116:2017:09} % Datenbankname: r \begin{minted}{sql} CREATE TABLE R2 ( b integer not null, c integer unique, primary key (b) ); CREATE TABLE R1 ( a integer not null, b integer references R2, primary key (a) ); \end{minted} \index{CREATE TABLE} Geben Sie jeweils an, ob das Statement syntaktisch korrekt ist und ob es von der gegebenen Datenbank ausgeführt werden kann. Beantworten Sie jede der folgenden Fragen unabhängig von allen anderen, \dh es liegt immer das hier gezeigte Schema vor undd alle Relationen sind leer. \begin{enumerate} \item \begin{minted}{sql} DELETE FROM R1; \end{minted} \index{DELETE} \begin{bAntwort} korrekt \end{bAntwort} \item \begin{minted}{sql} INSERT INTO R2 VALUES (1,1); INSERT INTO R1 VALUES (1,1); INSERT INTO R1 VALUES (2,1); INSERT INTO R1 VALUES (3,1); \end{minted} \index{INSERT} \begin{bAntwort} korrekt \end{bAntwort} \item \strut \begin{minted}{sql} INSERT INTO R2 VALUES (1,1); INSERT INTO R2 VALUES (2,2); INSERT INTO R1 VALUES (1,1); DELETE FROM R2 WHERE b=a; \end{minted} \begin{bAntwort} falsch: Fehlermeldung \texttt{column "a" does not exist} \begin{minted}{sql} INSERT INTO R2 VALUES (1,1); INSERT INTO R2 VALUES (2,2); INSERT INTO R1 VALUES (1,1); -- Wir löschen von R1 weil R2 auf R1 referenziert -- b kann nur mit Integer verglichen werden. DELETE FROM R1 WHERE b=1; \end{minted} \end{bAntwort} \item \strut \begin{minted}{sql} INSERT INTO R1 SELECT * FROM R1; \end{minted} \begin{bAntwort} korrekt \end{bAntwort} \item \strut \begin{minted}{sql} DROP TABLE R2 FROM DATABASE; \end{minted} \index{DROP TABLE} \begin{bAntwort} falsch: Fehlermeldung \texttt{ERROR: syntax error at or near "FROM"} Müsste so lauten: \begin{minted}{sql} -- Zuerst R1 löschen, wegen der Referenz DROP TABLE R1; DROP TABLE R2; \end{minted} \end{bAntwort} \end{enumerate} \end{document}