XP0
SQL — MODUL 06 · SUBQUERIES & SHOP
Jahrgangsstufe 12 · Informatik GK · Datenbanken
MODUL 06 — SUBQUERIES & FREIE ÜBUNGEN

DIESES MODUL

Block R — Subqueries: Abfragen innerhalb von Abfragen. IN, NOT IN, EXISTS, NOT EXISTS und skalare Subqueries.

Block S — Shop-Übungen: Eine neue Datenbank, keine Erklärungen — nur Aufgaben. Querbeet, mittelschwer bis komplex. Festigung des gesamten Stoffs.

SCHEMA BLOCK R — SCHULBIBLIOTHEK (bekannt)

Schueler · Buch · Ausleihe · Ausleihposition — wie in Modul 05.

SCHEMA BLOCK S — ONLINESHOP (neu)

7 Tabellen: Kunde, Kategorie, Artikel, Lieferant, ArtikelLieferant, Bestellung, Bestellposition.

R · SUBQUERIES200 XP

SUBQUERY — ABFRAGE IN DER ABFRAGE

Eine Subquery ist eine SELECT-Anweisung innerhalb einer anderen. Sie steht in Klammern und liefert entweder eine Liste von Werten (für IN/NOT IN) oder einen einzelnen Wert (skalare Subquery).

SELECT spalten FROM tabelle WHERE spalte IN ( SELECT spalte FROM andere_tabelle WHERE bedingung );

Vorteil gegenüber JOIN: manchmal lesbarer, besonders bei NOT IN und EXISTS.

BEISPIEL — IN 0 XP

Welche Schüler haben mindestens eine Ausleihe?

AUFGABE R1 — +10 XP +10 XP

Welche Bücher wurden schon mindestens einmal ausgeliehen? Zeige Titel und Genre.

AUFGABE R2 — +15 XP +15 XP

Welche Schüler haben das Buch „Tschick" ausgeliehen? Zeige Name und Klasse.

NOT IN

NOT IN — AUSSCHLIESSEN

NOT IN kehrt das Ergebnis um — es werden nur Zeilen angezeigt, die nicht in der Subquery-Liste vorkommen. Entspricht dem LEFT JOIN + IS NULL Muster aus Block O.

SELECT b.Titel FROM Buch b WHERE b.BuchID NOT IN ( SELECT ap.BuchID FROM Ausleihposition ap );

⚠ Achtung: Wenn die Subquery NULL-Werte liefert, gibt NOT IN keine Ergebnisse zurück. Bei möglichen NULLs besser NOT EXISTS verwenden.

BEISPIEL — NOT IN 0 XP

Welche Bücher wurden nie ausgeliehen?

AUFGABE R3 — +10 XP +10 XP

Welche Schüler haben noch nie etwas ausgeliehen? Zeige Name und Klasse.

AUFGABE R4 — +15 XP +15 XP

Welche Bücher aus dem Genre „Fantasy" wurden noch nie ausgeliehen?

EXISTS / NOT EXISTS

EXISTS — KORRELIERTE SUBQUERY

Bei EXISTS wird die Subquery für jede Zeile der äußeren Abfrage neu ausgeführt — sie kann auf die äußere Tabelle zugreifen. Das nennt man korrelierte Subquery.

SELECT s.Name FROM Schueler s WHERE EXISTS ( SELECT 1 FROM Ausleihe a WHERE a.SchuelerID = s.SchuelerID -- Bezug zur äußeren Tabelle AND a.DatumRueckgabe IS NULL );

SELECT 1 — der Rückgabewert ist egal, nur ob Zeilen existieren zählt. NOT EXISTS kehrt das Ergebnis um.

BEISPIEL — EXISTS 0 XP

Welche Schüler haben aktuell ein Buch ausgeliehen (noch nicht zurück)?

AUFGABE R5 — +15 XP +15 XP

Welche Bücher sind aktuell ausgeliehen (in einer offenen Ausleihe, DatumRueckgabe IS NULL)? Zeige Titel und Genre.

AUFGABE R6 — +20 XP +20 XP

Welche Schüler haben kein Buch aktuell ausgeliehen? Zeige Name und Klasse.

SKALARE SUBQUERY

SKALARE SUBQUERY — EIN WERT ALS VERGLEICH

Eine skalare Subquery liefert genau einen Wert — z.B. einen Durchschnitt — der dann als Vergleichswert in WHERE verwendet wird.

SELECT b.Titel, b.Preis FROM Buch b WHERE b.Preis > (SELECT AVG(Preis) FROM Buch);
AUFGABE R7 — +20 XP +20 XP

Welche Bücher kosten mehr als der Durchschnittspreis aller Bücher? Zeige Titel und Preis, teuerste zuerst.

S · SHOP-ÜBUNGEN395 XP

NEUE DATENBANK — ONLINESHOP

Keine Erklärungen, keine Beispiele — nur Aufgaben. Nutze das Schema und dein gesamtes SQL-Wissen. Hinweise kosten −5 XP.

KUNDE
KundeIDINTEGER · PK
NameTEXT
StrasseTEXT
PLZTEXT
StadtTEXT
KATEGORIE
KategorieIDINTEGER · PK
BezeichnungTEXT
ARTIKEL
ArtikelIDINTEGER · PK
BezeichnungTEXT
PreisREAL
KategorieIDINTEGER · FK
LIEFERANT
LieferantIDINTEGER · PK
NameTEXT
StrasseTEXT
PLZTEXT
StadtTEXT
ARTIKELLIEFERANT
ArtikelIDINTEGER · FK
LieferantIDINTEGER · FK
BESTELLUNG
BestellungIDINTEGER · PK
KundeIDINTEGER · FK
DatumDATE
BESTELLPOSITION
PositionIDINTEGER · PK
BestellungIDINTEGER · FK
ArtikelIDINTEGER · FK
AnzahlINTEGER
DATEN ERKUNDEN
TABELLEN ANSCHAUEN
MITTELSCHWER
S1 — +15 XP +15 XP

Welche Artikel gehören zur Kategorie „Elektronik"? Zeige Bezeichnung und Preis.

S2 — +15 XP +15 XP

Welche Kunden haben noch keine Bestellung aufgegeben? Zeige Name und Stadt.

S3 — +20 XP +20 XP

Wie viele Bestellungen hat jeder Kunde aufgegeben? Auch Kunden mit 0 Bestellungen anzeigen. Meiste zuerst.

S4 — +20 XP +20 XP

Welche Artikel wurden noch nie bestellt?

S5 — +20 XP +20 XP

Wie viel hat jede Bestellung insgesamt gekostet? Berechne die Summe aus Anzahl × Preis pro Position. Zeige BestellungID und Gesamtbetrag, teuerste zuerst.

SCHWER
S6 — +25 XP +25 XP

Welche Kategorien haben einen Durchschnittspreis über 50 €? Zeige Bezeichnung und Durchschnitt.

S7 — +25 XP +25 XP

Welche Kunden haben mehr als 2 verschiedene Artikel bestellt (gezählt über alle Bestellungen)?

S8 — +25 XP +25 XP

Welche Artikel kosten mehr als der Durchschnittspreis ihrer eigenen Kategorie? Zeige Bezeichnung, Preis und Kategorie.

S9 — +30 XP +30 XP

Welche Lieferanten liefern ausschließlich Artikel aus einer einzigen Kategorie? Zeige Lieferantenname und die Kategorie.

S10 — +30 XP +30 XP

Welche Kunden haben im Jahr 2025 für mehr als 200 € bestellt (Summe über alle ihre 2025-Bestellungen)?

KOMPLEX
S11 — +30 XP +30 XP

Umsatz pro Kunde über alle Bestellungen. Nur Kunden mit Gesamtumsatz über 100 € anzeigen. Höchster Umsatz zuerst.

S12 — +30 XP +30 XP

Umsatz pro Kategorie über alle Bestellungen. Welche Kategorie hat den höchsten Gesamtumsatz? Alle Kategorien anzeigen, höchste zuerst.

S13 — +35 XP +35 XP

Welche Artikel aus der Kategorie „Elektronik" wurden insgesamt mehr als 3 Mal bestellt (Anzahl summiert über alle Bestellungen)?

S14 — +35 XP +35 XP

Welche Kunden haben im Jahr 2025 mindestens eine Bestellung aufgegeben, aber keinen Artikel aus der Kategorie „Lebensmittel" bestellt?

S15 — +40 XP +40 XP

Welche Lieferanten liefern Artikel, die zusammen einen Gesamtumsatz über 500 € erzielt haben? Zeige Lieferantenname und Umsatz.

ERGEBNIS MODUL 06

Abschluss der SQL-Reihe für Klasse 12. Dein Ergebnis:

0 von 595 XP

R · SUBQUERIES

R10/10
R20/15
R30/10
R40/15
R50/15
R60/20
R70/20

S · SHOP

S1–S50/90
S6–S100/130
S11–S150/170

ABSCHLUSS

SQL-Reihe Klasse 9 + 12 abgeschlossen ✓