Skip to content
Snippets Groups Projects
Commit 580b43f1 authored by Dominik Bühler's avatar Dominik Bühler :alien:
Browse files

Changed some spacing LOLOLOLOLOLOL

parent 3b621f2a
No related branches found
No related tags found
No related merge requests found
......@@ -9,38 +9,32 @@
ALTER TABLE Besucht
ADD CONSTRAINT FK_Zuschauer_Zuschauer
FOREIGN KEY (ZuschauerID) REFERENCES Zuschauer(ID)
ON DELETE CASCADE
;
ON DELETE CASCADE;
ALTER TABLE Besucht
ADD CONSTRAINT FK_Aufführung_Aufführung
FOREIGN KEY (AufführungID) REFERENCES Aufführung(ID)
ON DELETE CASCADE
;
ON DELETE CASCADE;
ALTER TABLE ArbeitetMitAn
ADD CONSTRAINT FK_Aufführungsmitglied_Aufführungsmitglied
FOREIGN KEY (AufführungsmitgliedID) REFERENCES Aufführungsmitglied(ID)
ON DELETE CASCADE
;
ON DELETE CASCADE;
ALTER TABLE ArbeitetMitAn
ADD CONSTRAINT FK_Aufführung_Aufführung
FOREIGN KEY (AufführungID) REFERENCES Aufführung(ID)
ON DELETE CASCADE
;
ON DELETE CASCADE;
ALTER TABLE Zuteilung
ADD CONSTRAINT FK_Tier_Tier
FOREIGN KEY (TierID) REFERENCES Tier(ID)
ON DELETE CASCADE
;
ON DELETE CASCADE;
ALTER TABLE Zuteilung
ADD CONSTRAINT FK_Artist_Artist
FOREIGN KEY (ArtistID) REFERENCES Artist(ID)
ON DELETE CASCADE
;
ON DELETE CASCADE;
/*
* Konsistenzbedingungen setzen
......@@ -49,8 +43,7 @@ ADD CONSTRAINT FK_Artist_Artist
-- Artisten dürfen nicht über 65 Jahre alt sein.
ALTER TABLE Aufführungsmitglied
ADD CONSTRAINT KB_Alter
CHECK (Alter <= 65)
;
CHECK (Alter <= 65);
-- Es braucht immer min ein Artist pro Aufführung.
-- Es dürfen insgesamt nicht mehr Zuschauer als erlaubt zusehen.
......
......@@ -7,45 +7,43 @@
SELECT DISTINCT Alter
FROM Aufführungsmitglied
WHERE Nachname LIKE '%e%'
ORDER BY Alter ASC
;
ORDER BY Alter;
-- 1.2. Eine Query, die einen JOIN über drei oder mehr Tabellen enthält (bitte als "New Style"-JOIN mit "JOIN ... ON").
SELECT Zuschauer.Nachname,
Zuschauer.Vorname,
Aufführung.Datum,
Aufführungsmitglied.Nachname,
Aufführungsmitglied.Vorname
Zuschauer.Vorname,
Aufführung.Datum,
Aufführungsmitglied.Nachname,
Aufführungsmitglied.Vorname
FROM Zuschauer
JOIN Besucht ON Zuschauer.ID = Besucht.ZuschauerID
JOIN Aufführung ON Besucht.AufführungID = Aufführung.ID
JOIN ArbeitetMitAn ON Aufführung.ID = ArbeitetMitAn.AufführungID
JOIN Aufführungsmitglied ON ArbeitetMitAn.AufführungsmitgliedID = Aufführungsmitglied.ID
ORDER BY Aufführung.Datum ASC
;
JOIN Besucht ON Zuschauer.ID = Besucht.ZuschauerID
JOIN Aufführung ON Besucht.AufführungID = Aufführung.ID
JOIN ArbeitetMitAn ON Aufführung.ID = ArbeitetMitAn.AufführungID
JOIN Aufführungsmitglied ON ArbeitetMitAn.AufführungsmitgliedID = Aufführungsmitglied.ID
ORDER BY Aufführung.Datum;
-- 1.3. Eine Query mit einer Unterabfrage mit Angabe, ob diese Query korreliert ist oder unkorreliert.
-- Unterabfrage ist unkorreliert
SELECT *
FROM Aufführungsmitglied
WHERE Alter < (
SELECT AVG(Alter)
FROM Aufführungsmitglied
)
;
SELECT AVG(Alter)
FROM Aufführungsmitglied
);
-- 1.4. Eine Query, die eines der vier folgenden Statements enthält (gegebenenfalls mit NOT davor): ANY, IN, EXISTS oder ALL.
SELECT *
FROM Aufführungsmitglied
WHERE ID IN (
SELECT ID
FROM Tier
)
;
SELECT ID
FROM Tier
);
---------------------------------------------------------------------------
-- 2.1 Common Table Expressions/WITH-Statements:
-- 2.1.1 Schreiben Sie zunächst eine Anfrage mit einer unkorrelierten Unterabfrage (en: subquery) im FROM-Teil (anstelle einer Tabelle) und dokumentieren Sie diese als einfacher Kommentar vor dem SQL-Statement.
-- 2.1.1 Schreiben Sie zunächst eine Anfrage mit einer unkorrelierten Unterabfrage (en: subquery) im FROM-Teil (anstelle einer Tabelle)
-- und dokumentieren Sie diese als einfacher Kommentar vor dem SQL-Statement.
--
-- SELECT *
-- FROM (
-- SELECT *
......@@ -56,71 +54,62 @@ WHERE ID IN (
-- 2.1.2 Formen Sie dann diese Query um in eine äquivalente Query mit Common Table Expression anstatt einer Subquery.
WITH AufführungsmitgliedUnter30 AS (
SELECT *
FROM Aufführungsmitglied
WHERE Alter < 30
SELECT *
FROM Aufführungsmitglied
WHERE Alter < 30
)
SELECT *
FROM AufführungsmitgliedUnter30
;
FROM AufführungsmitgliedUnter30;
-- 2.2 GROUP-BY und Window-Funktionen:
-- 2.2.1 Schreiben Sie eine sinnvolle Query mit einer GROUP BY-Klausel.
SELECT AufführungID,
COUNT(AufführungsmitgliedID) AS AnzahlAufführungsmitglieder
COUNT(AufführungsmitgliedID) AS AnzahlAufführungsmitglieder
FROM ArbeitetMitAn
GROUP BY AufführungID
;
GROUP BY AufführungID;
-- 2.2.2 Schreiben Sie eine sinnvolle Query mit einer Window-Funktion.
SELECT Zuschauer.ID,
Zuschauer.Nachname,
Zuschauer.Vorname,
COUNT(Besucht.AufführungID) OVER (PARTITION BY Zuschauer.ID) AS GesamtAufführungenBesucht
Zuschauer.Nachname,
Zuschauer.Vorname,
COUNT(Besucht.AufführungID) OVER (PARTITION BY Zuschauer.ID) AS GesamtAufführungenBesucht
FROM Zuschauer
JOIN Besucht ON Zuschauer.ID = Besucht.ZuschauerID
ORDER BY Zuschauer.ID,
Besucht.AufführungID
;
JOIN Besucht ON Zuschauer.ID = Besucht.ZuschauerID
ORDER BY Zuschauer.ID, Besucht.AufführungID;
---------------------------------------------------------------------------
-- 3.1 Views:
-- Schreiben Sie eine View, die mindestens drei Tabellen umfasst.
CREATE VIEW AufführungDetail AS
SELECT Aufführung.ID AS AufführungID,
Aufführung.Datum,
Aufführung.MaxZuschauer,
Zuschauer.Nachname,
Zuschauer.Vorname,
Zuschauer.ID
Aufführung.Datum,
Aufführung.MaxZuschauer,
Zuschauer.Nachname,
Zuschauer.Vorname,
Zuschauer.ID
FROM Aufführung
JOIN Besucht ON Aufführung.ID = Besucht.AufführungID
JOIN Zuschauer ON Besucht.ZuschauerID = Zuschauer.ID
;
JOIN Besucht ON Aufführung.ID = Besucht.AufführungID
JOIN Zuschauer ON Besucht.ZuschauerID = Zuschauer.ID;
-- Schreiben Sie dann eine normale Query, welche diese View verwendet.
SELECT *
FROM AufführungDetail
WHERE AufführungID = 8
;
WHERE AufführungID = 8;
-- 3.2 Schreiben Sie eine zweite View (also eine "einfachere" View), die sich updaten lässt.
CREATE VIEW ZuschauerInfo AS
SELECT ID,
Nachname,
Vorname
FROM Zuschauer
;
Nachname,
Vorname
FROM Zuschauer;
-- Testen Sie, dass die View sich wirklich updaten lässt, wie folgt:
-- Eine Änderung eines bestimmten Datensatzes über diese View schreiben mittels UPDATE (UPDATE <Ihre View> SET ... WHERE ...;).
UPDATE ZuschauerInfo
SET Nachname = 'Einhorn'
WHERE ID = 1001
;
WHERE ID = 1001;
-- Überprüfen Sie, ob die Änderung auch in der ursprünglichen Tabelle sichtbar ist (SELECT * FROM <Ihre Tabelle> WHERE ...;).
SELECT *
FROM ZuschauerInfo
WHERE ID = 1001
;
WHERE ID = 1001;
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment