37 lines
1.2 KiB
SQL
37 lines
1.2 KiB
SQL
-- 🧪 SQL TEST SUITE: MODUL 08 (n:m Beziehungen & Junction Tables)
|
|
|
|
-- Test 1: Tabellenprüfung
|
|
SELECT count(*) AS total_studenten FROM studenten;
|
|
SELECT count(*) AS total_kurse FROM kurse;
|
|
|
|
-- Test 2: Vollständiger n:m 3-Wege-Join
|
|
SELECT
|
|
s.matrikelnummer,
|
|
(s.vorname || ' ' || s.nachname) AS student_name,
|
|
k.kurs_code,
|
|
k.titel AS kurs_titel,
|
|
e.semester,
|
|
e.note,
|
|
e.status
|
|
FROM studenten s
|
|
JOIN einschreibungen e ON s.id = e.student_id
|
|
JOIN kurse k ON e.kurs_id = k.id
|
|
ORDER BY s.nachname, k.kurs_code;
|
|
|
|
-- Test 3: Bestehensprüfung für Kurs DB101 mit Note <= 2.0 (Erwartet Felix & Hannah)
|
|
SELECT
|
|
s.vorname, s.nachname, e.note
|
|
FROM studenten s
|
|
JOIN einschreibungen e ON s.id = e.student_id
|
|
JOIN kurse k ON e.kurs_id = k.id
|
|
WHERE k.kurs_code = 'DB101' AND e.note <= 2.0
|
|
ORDER BY e.note ASC;
|
|
|
|
-- Test 4: Kaskadierendes Löschen verifizieren:
|
|
-- Durch das Löschen von WEB201 dürfen keine verwaisten Einträge in einschreibungen verbleiben!
|
|
SELECT count(*) AS verwaiste_eintraege
|
|
FROM einschreibungen
|
|
WHERE kurs_id NOT IN (SELECT id FROM kurse);
|
|
|
|
-- Test 5: Verbleibende Gesamteinschreibungen (nach Löschen von WEB201: 7 - 2 = 5)
|
|
SELECT count(*) AS verbleibende_einschreibungen FROM einschreibungen;
|