Aufgabe 13 - SQL Mengenoperationen (E-Sports Edition)
Aufgabe 13 - SQL Mengenoperationen (E-Sports Edition)
Abschnitt betitelt „Aufgabe 13 - SQL Mengenoperationen (E-Sports Edition)“Worum geht es?
Abschnitt betitelt „Worum geht es?“In dieser Übung werden Ergebnismengen mehrerer Abfragen mit den Mengenoperatoren UNION, INTERSECT und EXCEPT kombiniert, ganz ohne komplexe Joins (siehe Kapitel 5 - SQL-Grundlagen). Im Expertenteil werden Mengenoperationen für eine echte Konsistenzanalyse eingesetzt.
Was Sie dafür brauchen
Abschnitt betitelt „Was Sie dafür brauchen“- Kapitel 5 - SQL-Grundlagen, Abschnitt Mengenoperationen.
- Ein PostgreSQL-Server und ein SQL-Editor.
Welche Kompetenzen Sie erwerben und zeigen
Abschnitt betitelt „Welche Kompetenzen Sie erwerben und zeigen“- Sie führen Ergebnismengen mit
UNIONundUNION ALLzusammen. - Sie bilden Schnittmengen mit
INTERSECTund Differenzen mitEXCEPT. - Sie kennen die Voraussetzungen (gleiche Spaltenzahl, passende Typen).
- Sie kombinieren Mengenoperationen zu einer symmetrischen Differenz und finden Duplikate.
Pädagogische Einordnung
Abschnitt betitelt „Pädagogische Einordnung“- Reproduktion: Mengen mit
UNIONvereinigen (Teil A). - Reorganisation und Transfer: Schnittmengen und Differenzen bilden (Teile B und C).
- Reflexion, Problemlösung und Urteilsbildung: Operationen zu einer Konsistenzanalyse kombinieren (Teil D).
Arbeitsaufträge
Abschnitt betitelt „Arbeitsaufträge“Die Übung ist auf etwa zwei Stunden ausgelegt. Teil D ist der Expertenteil.
Schema und Testdaten
Abschnitt betitelt „Schema und Testdaten“CREATE TABLE teams ( team_id INT PRIMARY KEY, team_name VARCHAR(50), region VARCHAR(30), rank INTEGER);
CREATE TABLE matches ( match_id SERIAL PRIMARY KEY, team_id INTEGER, game VARCHAR(50), kills INTEGER);
INSERT INTO teams VALUES(1, 'Cyber Vipers', 'Europe', 1),(2, 'Neon Samurais', 'Asia', 5),(3, 'Arctic Foxes', 'North America', 12),(4, 'Desert Rats', 'Africa', 20);
INSERT INTO matches (team_id, game, kills) VALUES(1, 'League of Legends', 25),(1, 'Valorant', 40),(2, 'Counter-Strike', 15),(2, 'League of Legends', 10),(99, 'Dota 2', 50);Tipp: Eine fiktive einzeilige Menge erzeugt man mit
SELECT 'Oceania' AS region.
Teil A - Vereinigung (UNION)
Abschnitt betitelt „Teil A - Vereinigung (UNION)“- Alle Regionen aus
teamsauflisten und per Mengenoperation die fiktiven Regionen'South America'und'Oceania'ergänzen. - Eine Liste aller vorkommenden IDs erstellen (
team_idausteamsund ausmatcheskombinieren). - Die Abfrage aus 2 einmal mit
UNIONund einmal mitUNION ALLausführen und den Unterschied erklären (besonders bei Team-ID 1 und 2).
Teil B - Schnittmenge (INTERSECT)
Abschnitt betitelt „Teil B - Schnittmenge (INTERSECT)“- Alle
team_ids finden, die sowohl inteamsals auch inmatchesexistieren. - „Top-Regionen” sind Regionen mit Teams vom
rank < 10. Diese Liste bilden und nur jene Regionen anzeigen, die auch in der fiktiven Liste'Europe','Asia','Antarctica'enthalten sind.
Teil C - Differenz (EXCEPT)
Abschnitt betitelt „Teil C - Differenz (EXCEPT)“team_ids der Teams finden, die inteamsstehen, aber keinen Eintrag inmatcheshaben.- Alle Regionen aus
teamsaußer der Region von „Arctic Foxes” auflisten. - „Daten-Leichen” finden:
team_ids ausmatches, die nicht inteamsgeführt werden.
Teil D - Expertenteil: Konsistenzanalyse mit kombinierten Operationen
Abschnitt betitelt „Teil D - Expertenteil: Konsistenzanalyse mit kombinierten Operationen“-
Symmetrische Differenz: In einer einzigen Abfrage alle
team_ids finden, die entweder nur inteamsoder nur inmatchesvorkommen (also in genau einer der beiden Tabellen). Kombinieren Sie dazu zweiEXCEPT-Abfragen mitUNION:(SELECT team_id FROM teams EXCEPT SELECT team_id FROM matches)UNION(SELECT team_id FROM matches EXCEPT SELECT team_id FROM teams);Erklären Sie in zwei Sätzen, welche Datenprobleme diese Liste sichtbar macht.
-
Sortierte Gesamtmenge: Die kombinierte ID-Liste aus Teil A so ausgeben, dass sie aufsteigend sortiert ist. Zeigen, dass
ORDER BYnur einmal am Ende der gesamten Mengenoperation stehen darf. -
Duplikate aufspüren: Mit
UNION ALLund anschließender Gruppierung ermitteln, welcheteam_idin der Vereinigung austeams.team_idundmatches.team_idmehr als einmal vorkommt.SELECT team_id, count(*) AS cntFROM (SELECT team_id FROM teamsUNION ALLSELECT team_id FROM matches) combinedGROUP BY team_idHAVING count(*) > 1ORDER BY cnt DESC;Erklären Sie, warum diese Auswertung mit
UNION(stattUNION ALL) nicht funktionieren würde.
Wissenscheck
Abschnitt betitelt „Wissenscheck“- Warum schlägt
SELECT team_name FROM teams UNION SELECT kills FROM matchesfehl? - Welcher Mengenoperator entspricht einer „UND”-Verknüpfung zweier Abfrageergebnisse?
- Worin unterscheiden sich
UNIONundUNION ALLin Ergebnis und Performance? - Wie bildet man mit Mengenoperationen eine symmetrische Differenz?
- Warum braucht das Aufspüren von Duplikaten
UNION ALLstattUNION?
- Die Datei
aufgabe13_mengen.sqlmit allen Abfragen, fehlerfrei ausführbar, SQL-Schlüsselwörter konsistent groß.
HTL Villach, Schuljahr 2025-2026,
https://www.htl-villach.at