SQLize Online / PHPize Online  /  SQLtest Online

A A A
Share      Blog   Popular
Copy Format Clear
CREATE TABLE besitzer ( besitzer_id integer PRIMARY KEY, name varchar(20), vorname varchar(20), strasse varchar(50), hausnr smallint, plz integer ); CREATE TABLE hunde ( hunde_id integer PRIMARY KEY, hunde_name varchar(20), rasse varchar(40), geschlecht char, besitzer_id integer REFERENCES besitzer(besitzer_id) ON DELETE CASCADE, CHECK (geschlecht = 'w' OR geschlecht = 'm') ); CREATE TABLE trainer ( trainer_id integer PRIMARY KEY, name varchar(20), vorname varchar(20) ); CREATE TABLE zertifikat ( zertifikat_id integer PRIMARY KEY, bezeichnung varchar(100) ); CREATE TABLE kurs ( kurs_nr integer PRIMARY KEY, kursname varchar(100), trainer_id integer REFERENCES trainer(trainer_id), zertifikat_id integer REFERENCES zertifikat(zertifikat_id) ); CREATE TABLE termin ( termin_nr integer PRIMARY KEY, datum date null, uhr time, kurs_nr integer REFERENCES kurs(kurs_nr) ON DELETE CASCADE, hunde_id integer REFERENCES hunde(hunde_id) ON DELETE CASCADE ); CREATE TABLE hunde_zertifikat ( hunde_id integer REFERENCES hunde(hunde_id) ON DELETE CASCADE, zertifikat_id integer REFERENCES zertifikat(zertifikat_id), note numeric(8,1), PRIMARY KEY (hunde_id, zertifikat_id) ); CREATE TABLE rudel ( rudel_nr integer PRIMARY KEY, rudelname varchar(40) ); CREATE TABLE rudel_mitglied ( rudel_nr integer REFERENCES rudel(rudel_nr) ON DELETE CASCADE, mitglied_id integer REFERENCES hunde(hunde_id), PRIMARY KEY (rudel_nr, mitglied_id) ); CREATE TABLE hunderennen ( zeitraum varchar(20) PRIMARY KEY, rennname varchar(40) ); CREATE TABLE rennerergebnis ( zeitraum varchar(20) REFERENCES hunderennen(zeitraum), rudel_nr integer REFERENCES rudel(rudel_nr), endzeit time, PRIMARY KEY (zeitraum, rudel_nr) ); INSERT INTO besitzer VALUES (1, 'Holland', 'Tom', 'Alicenstr', 9, 35392); INSERT INTO besitzer VALUES (2, 'Cena', 'John', 'Breitenstr', 17, 35398); INSERT INTO besitzer VALUES (3, 'Downey', 'Robert', 'Schillerstr', 11, 35390); INSERT INTO hunde VALUES (1, 'Molly', 'Husky', 'w', 1); INSERT INTO hunde VALUES (2, 'Arthur', 'Shiba Inu', 'm', 2); INSERT INTO hunde VALUES (3, 'Petra', 'Dogge', 'm', 2); INSERT INTO hunde VALUES (4, 'Bonty', 'Dogge', 'w', 1); INSERT INTO hunde VALUES (5, 'Winter', 'Husky', 'm', 3); INSERT INTO hunde VALUES (6, 'Summer', 'Dogge', 'w', 3); INSERT INTO hunde VALUES (7, 'Autumn', 'Shiba Inu', 'm', 1); INSERT INTO hunde VALUES (8, 'Star', 'Dogge', 'w', 3); INSERT INTO hunde VALUES (9, 'Lily', 'Shiba Inu', 'w', 2); INSERT INTO trainer VALUES (1, 'Ackerman', 'Levi'); INSERT INTO trainer VALUES (2, 'D. Luffy', 'Monkey'); INSERT INTO trainer VALUES (3, 'Jaeger', 'Eren'); INSERT INTO trainer VALUES (4, 'Arlert', 'Armin'); INSERT INTO zertifikat VALUES (1, 'Bachelor of Blanket'); INSERT INTO zertifikat VALUES (2, 'Bachelor of Clicks'); INSERT INTO zertifikat VALUES (3, 'Master of Poison'); INSERT INTO zertifikat VALUES (4, 'Master of Tricks'); INSERT INTO zertifikat VALUES (5, 'Bachelor of Fetch'); INSERT INTO kurs VALUES (1, 'Grundkurs Deckentraining', 1, 1); INSERT INTO kurs VALUES (2, 'Clickertraining', 1, 2); INSERT INTO kurs VALUES (3, 'Anti-Giftkoeder-Training', 2, 3); INSERT INTO kurs VALUES (4, 'Hundetricks', 3, 4); INSERT INTO kurs VALUES (5, 'Apportieren lernen', 2, 5); INSERT INTO termin VALUES (1, '2024-01-31', now(), 1, 1); INSERT INTO termin VALUES (2, '2023-01-06', now(), 3, 4); INSERT INTO termin VALUES (3, '2023-08-24', now(), 5, 5); INSERT INTO termin VALUES (4, '2023-07-01', now(), 2, 3); INSERT INTO termin VALUES (5, '2023-07-03', now(), 2, 6); INSERT INTO hunde_zertifikat VALUES (1, 2, 3.5); INSERT INTO hunde_zertifikat VALUES (2, 3, 1.2); INSERT INTO hunde_zertifikat VALUES (2, 4, 2.0); INSERT INTO hunde_zertifikat VALUES (4, 1, 4.3); INSERT INTO hunde_zertifikat VALUES (2, 5, 3.3); INSERT INTO hunde_zertifikat VALUES (4, 5, 1.7); INSERT INTO rudel VALUES (1, 'At Least We Tried'); INSERT INTO rudel VALUES (2, 'Born Pro'); INSERT INTO rudel VALUES (3, 'Legends Never Die'); INSERT INTO rudel_mitglied VALUES (1, 1); INSERT INTO rudel_mitglied VALUES (2, 2); INSERT INTO rudel_mitglied VALUES (1, 9); INSERT INTO rudel_mitglied VALUES (3, 5); INSERT INTO rudel_mitglied VALUES (3, 4); INSERT INTO rudel_mitglied VALUES (2, 6); INSERT INTO rudel_mitglied VALUES (1, 7); INSERT INTO rudel_mitglied VALUES (2, 3); INSERT INTO rudel_mitglied VALUES (3, 8); INSERT INTO hunderennen VALUES ('20/21', 'Winter Solstice Race'); INSERT INTO hunderennen VALUES ('21/22', 'Winter Wonderland Competition'); INSERT INTO hunderennen VALUES ('22/23', 'Blizzard Snow Race'); INSERT INTO rennerergebnis VALUES ('20/21', 1, '00:05:30'); INSERT INTO rennerergebnis VALUES ('20/21', 2, '00:04:25'); INSERT INTO rennerergebnis VALUES ('20/21', 3, '00:03:55'); INSERT INTO rennerergebnis VALUES ('21/22', 1, '00:07:01'); INSERT INTO rennerergebnis VALUES ('21/22', 2, '00:06:40'); INSERT INTO rennerergebnis VALUES ('21/22', 3, '00:08:11'); INSERT INTO rennerergebnis VALUES ('22/23', 1, '00:08:09'); INSERT INTO rennerergebnis VALUES ('22/23', 2, '00:08:50'); INSERT INTO rennerergebnis VALUES ('22/23', 3, '00:09:06'); /* 1. Zu welchem Kurs sind durchschnittlich die meisten Doggen angemeldet? */ SELECT k.kurs_nr, k.kursname, COUNT(*) AS anz_teilnehmer FROM kurs k INNER JOIN termin t ON t.kurs_nr = k.kurs_nr WHERE k.kurs_nr IN ( SELECT t.kurs_nr FROM termin WHERE t.hunde_id IN ( SELECT h.hunde_id FROM hunde h WHERE h.rasse = 'Dogge' ) GROUP BY t.kurs_nr ) GROUP BY k.kurs_nr, k.kursname ORDER BY COUNT(*) DESC LIMIT 1; /* 2. Welcher Hund hat die meisten Zertifikate gesammelt? (Geordnet von den meisten bis zu den wenigsten Zertifikatsinhabern) */ SELECT hz.hunde_id, h.hunde_name, COUNT(*) anz_zertifikat FROM hunde_zertifikat hz INNER JOIN hunde h USING (hunde_id) GROUP BY hz.hunde_id, h.hunde_name ORDER BY COUNT(*) DESC; /* 3. Wer ist der Hundebesitzer mit den meisten Rassen? */ SELECT b.besitzer_id, b.name, b.vorname, COUNT(DISTINCT h.rasse) anz_rasse FROM besitzer b INNER JOIN hunde h USING (besitzer_id) GROUP BY b.besitzer_id, b.name, b.vorname ORDER BY COUNT(*) DESC; /* 4. Welches Rudel hat die Bestzeit im letzten Schlittenhunderennen erreicht und wie viele Shiba Inu sind in diesem Team? */ SELECT r.rudel_nr, r.rudelname, re.endzeit AS bestzeit, COUNT(CASE WHEN h.rasse = 'Shiba Inu' THEN h.rasse ELSE NULL END) AS anz_shibainu FROM rennerergebnis re INNER JOIN rudel r USING (rudel_nr) INNER JOIN rudel_mitglied rm USING (rudel_nr) INNER JOIN hunde h ON h.hunde_id = rm.mitglied_id WHERE re.zeitraum = '22/23' GROUP BY r.rudel_nr, r.rudelname, re.endzeit ORDER BY bestzeit ASC LIMIT 1; /* 5. Welcher Trainer bildet mehr als 1 Kurs aus? */ SELECT tr.trainer_id, tr.name FROM trainer tr INNER JOIN kurs k USING (trainer_id) GROUP BY tr.trainer_id, tr.name HAVING COUNT(*) > 1 ORDER BY tr.trainer_id ASC; /* 6. Zeigen Sie eine Liste der Durchschnittsnoten aller Hündinnen, die Zertifikate erhalten haben, von der höchsten bis zur niedrigsten. */ SELECT hz.hunde_id, CAST(AVG(hz.note) AS numeric(8,1)) AS durchschnittsnote FROM hunde_zertifikat hz INNER JOIN hunde h USING (hunde_id) WHERE h.geschlecht = 'w' GROUP BY hz.hunde_id; /* 7. Liste aller Hunde, die zu keinem Kurstermin angemeldet sind, nach Namen aufsteigend sortiert. */ SELECT h.hunde_name FROM hunde h WHERE h.hunde_id not in (SELECT t.hunde_id FROM termin t) ORDER BY h.hunde_name ASC; /* 8. Welcher Hund hat das "Anti-Giftkoeder-Training" absolviert? */ SELECT hz.hunde_id, h.hunde_name FROM hunde_zertifikat hz INNER JOIN hunde h ON h.hunde_id = hz.hunde_id INNER JOIN kurs k ON k.zertifikat_id = hz.zertifikat_id WHERE kursname = 'Anti-Giftkoeder-Training' GROUP BY hz.hunde_id, h.hunde_name; /* Trigger - create a trigger that checks if a specific dog has Bachelor certificate before registering Master course */ CREATE OR REPLACE FUNCTION check_zertifikat() RETURNS trigger AS $$ DECLARE erforderlich integer; BEGIN SELECT hz.zertifikat_id INTO erforderlich FROM hunde_zertifikat hz WHERE hz.hunde_id = NEW.hunde_id; IF (NEW.kurs_nr = 3 OR NEW.kurs_nr = 4) AND erforderlich IS NULL THEN RAISE EXCEPTION 'Erforderliches Zertifikat fehlt --> 1, 2 oder 5' USING HINT = 'Bitte überprüfen Sie das Zertifikat Ihres Hundes'; END IF; RETURN NULL; END; $$ LANGUAGE PLPGSQL; CREATE OR REPLACE TRIGGER tg_zertifikat AFTER INSERT OR UPDATE ON termin FOR EACH ROW EXECUTE FUNCTION check_zertifikat(); /* Zum Testen */ INSERT INTO termin VALUES (6, '2023-07-02', now(), 3, 7); INSERT INTO termin VALUES (7, '2023-08-24', now(), 4, 4); SELECT * FROM termin; SELECT * hunde_name FROM hunde;
Stuck with a problem? Got Error? Ask ChatGPT!
Copy Clear