SQL – Filtern, Sortieren, Rechnen

Sortieren und SQL-Training

In Heft 4 hast du mit der Geodatenbank terra die Sprache SQL kennengelernt. Zuerst lernst du, Ergebnisse zu sortieren. Danach trainierst du deine Abfragen an neuen Datenbanken: einer Schule und einem Sportverein. Dazu kommen zwei neue Werkzeuge: DISTINCT und das Rechnen in SQL.

Zur Erinnerung: Bestandteile eines SQL-Befehls

TeilBedeutungBeispiel
SELECTAttribute, die ausgegeben werdenSELECT Name, Einwohner
FROMTabelle, aus der die Daten stammenFROM land
WHEREBedingungen, die die Datensätze erfüllen müssenWHERE Kontinent = 'Europa'
ORDER BYSortierung: ASC aufsteigend (Standard), DESC absteigendORDER BY Einwohner DESC

So funktionieren die SQL-Aufgaben

  • ▶ Ausführen & prüfen (oder Strg + Enter) führt deine Abfrage aus, zeigt dir das Ergebnis, vergleicht es mit der Vorgabe und speichert deine Abfrage. Du kannst so oft ausprobieren, wie du willst.
  • Ist dein Ergebnis noch falsch, kannst du 🔍 Fehler markieren einschalten: Dann werden Datensätze, Werte oder Spalten hervorgehoben, die nicht stimmen. Kommst du gar nicht weiter, füllt 🧩 Struktur vorgeben I ein Gerüst aus SELECT … FROM … WHERE … ein, II ergänzt zusätzlich die Operatoren. Deine Lehrkraft sieht, wenn du diese Hilfen benutzt – probiere es zuerst selbst.
  • Die Reihenfolge der Spalten ist egal, solange die verlangten Attribute ausgegeben werden. Die Reihenfolge der Datensätze zählt nur, wenn die Aufgabe eine Sortierung verlangt.

1 Sortierung in SQL

Die Datensätze als Ergebnis einer SQL-Anfrage werden in der Regel unsortiert ausgegeben. Eine vorhandene Sortierung ist dann Zufall!

Merke

Die ORDER BY-Anweisung erzwingt eine bestimmte Reihenfolge. Die Liste der Attribute gibt die Sortierreihenfolge an. Die Schlüsselworte ASC und DESC erzwingen eine aufsteigende (Standard) oder absteigende Sortierung. Die Abkürzungen leiten sich von den englischen Wörtern ascending und descending ab.

So sortiert das folgende Beispiel die Länder erst nach dem Kontinent und dann absteigend nach der Einwohnerzahl:

SELECT Kontinent, Name
  FROM land
 ORDER BY Kontinent, Einwohner DESC
Aufgabe 1 🗄 terra (Länder und Orte)
Gib alle Länder aus. Dabei sollen Name, Einwohner und Hauptstadt angezeigt und nach Einwohner absteigend sortiert werden.
Datenbankschema „terra (Länder und Orte)“ anzeigen
land (197 Datensätze)
  • 🔑 LNR varchar(4)
  • Name varchar(50)
  • Einwohner decimal(20,2)
  • Flaeche int(11)
  • Hauptstadt varchar(30)
  • Kontinent varchar(15)
  • KontinentFlaeche int(11)
  • KontinentEinwohner int(11)
ort (26851 Datensätze)
  • Name varchar(30)
  • Land varchar(50)
  • Einwohner int(11)
  • Laenge decimal(10,4)
  • Breite decimal(10,4)

🔑 Primärschlüssel · → Fremdschlüssel (verweist auf Tabelle.Attribut)

Struktur vorgeben:

Ohne Anmeldung wird deine Abfrage nicht gespeichert.

Aufgabe 2 🗄 terra (Länder und Orte)
Welche Länder haben zwischen 10 und 100 Mio. Einwohner (jeweils einschließlich)? Gib Name und Einwohner absteigend nach Einwohner sortiert aus.
Datenbankschema „terra (Länder und Orte)“ anzeigen
land (197 Datensätze)
  • 🔑 LNR varchar(4)
  • Name varchar(50)
  • Einwohner decimal(20,2)
  • Flaeche int(11)
  • Hauptstadt varchar(30)
  • Kontinent varchar(15)
  • KontinentFlaeche int(11)
  • KontinentEinwohner int(11)
ort (26851 Datensätze)
  • Name varchar(30)
  • Land varchar(50)
  • Einwohner int(11)
  • Laenge decimal(10,4)
  • Breite decimal(10,4)

🔑 Primärschlüssel · → Fremdschlüssel (verweist auf Tabelle.Attribut)

Struktur vorgeben:

Ohne Anmeldung wird deine Abfrage nicht gespeichert.

Multiple Choice

Aufgabe 3: Beschreibe, was der folgende SQL-Befehl ausgeben wird: SELECT Kontinent, Name FROM land ORDER BY Kontinent, Einwohner DESC

2 Die Schuldatenbank

Das (erfundene) Gymnasium am Sonnenhügel speichert seine Daten in mehreren Tabellen: schueler, klasse, lehrer, note, ag und ag_teilnahme. Klappe bei der ersten Aufgabe das Datenbankschema auf und verschaffe dir einen Überblick. Für dieses Kapitel brauchst du jeweils nur eine Tabelle.

Aufgabe 4 🗄 Schule
Gib Vorname und Nachname aller Schülerinnen und Schüler der Klasse 7c aus.
Datenbankschema „Schule“ anzeigen
lehrer (22 Datensätze)
  • 🔑 LehrerID integer
  • Kuerzel varchar(4)
  • Vorname varchar(30)
  • Nachname varchar(30)
  • Fach1 varchar(20)
  • Fach2 varchar(20)
klasse (16 Datensätze)
  • 🔑 Bezeichnung varchar(3)
  • Stufe integer
  • Raum varchar(5)
  • LehrerID integer → lehrer.LehrerID
schueler (359 Datensätze)
  • 🔑 SchuelerID integer
  • Vorname varchar(30)
  • Nachname varchar(30)
  • Geburtsdatum date
  • Wohnort varchar(30)
  • Klasse varchar(3) → klasse.Bezeichnung
note (2139 Datensätze)
  • 🔑 NoteID integer
  • SchuelerID integer → schueler.SchuelerID
  • Fach varchar(20)
  • Art varchar(20)
  • Datum date
  • Note integer
  • LehrerID integer → lehrer.LehrerID
ag (8 Datensätze)
  • 🔑 AGID integer
  • Name varchar(30)
  • Wochentag varchar(10)
  • Raum varchar(5)
  • LehrerID integer → lehrer.LehrerID
ag_teilnahme (228 Datensätze)
  • 🔑 SchuelerID integer → schueler.SchuelerID
  • 🔑 AGID integer → ag.AGID

🔑 Primärschlüssel · → Fremdschlüssel (verweist auf Tabelle.Attribut)

Struktur vorgeben:

Ohne Anmeldung wird deine Abfrage nicht gespeichert.

Aufgabe 5 🗄 Schule
Gib Nachname und Vorname aller Schülerinnen und Schüler aus, die in Sulzbach wohnen – sortiert nach dem Nachnamen und bei gleichem Nachnamen nach dem Vornamen.
Datenbankschema „Schule“ anzeigen
lehrer (22 Datensätze)
  • 🔑 LehrerID integer
  • Kuerzel varchar(4)
  • Vorname varchar(30)
  • Nachname varchar(30)
  • Fach1 varchar(20)
  • Fach2 varchar(20)
klasse (16 Datensätze)
  • 🔑 Bezeichnung varchar(3)
  • Stufe integer
  • Raum varchar(5)
  • LehrerID integer → lehrer.LehrerID
schueler (359 Datensätze)
  • 🔑 SchuelerID integer
  • Vorname varchar(30)
  • Nachname varchar(30)
  • Geburtsdatum date
  • Wohnort varchar(30)
  • Klasse varchar(3) → klasse.Bezeichnung
note (2139 Datensätze)
  • 🔑 NoteID integer
  • SchuelerID integer → schueler.SchuelerID
  • Fach varchar(20)
  • Art varchar(20)
  • Datum date
  • Note integer
  • LehrerID integer → lehrer.LehrerID
ag (8 Datensätze)
  • 🔑 AGID integer
  • Name varchar(30)
  • Wochentag varchar(10)
  • Raum varchar(5)
  • LehrerID integer → lehrer.LehrerID
ag_teilnahme (228 Datensätze)
  • 🔑 SchuelerID integer → schueler.SchuelerID
  • 🔑 AGID integer → ag.AGID

🔑 Primärschlüssel · → Fremdschlüssel (verweist auf Tabelle.Attribut)

Struktur vorgeben:

Ohne Anmeldung wird deine Abfrage nicht gespeichert.

3 Neu: Jeden Wert nur einmal – DISTINCT

Der TuS Blau-Weiß Bliesheim (erfunden) möchte wissen, aus welchen Orten seine Mitglieder kommen. Die Abfrage SELECT Wohnort FROM mitglied liefert aber 160 Zeilen – für jedes Mitglied eine, und Bliesheim taucht dutzende Male auf.

SELECT DISTINCT Wohnort
  FROM mitglied
Wohnort
Kirkel
Homburg
Mandelbachtal
Bliesheim
…

Mit DISTINCT erscheint jeder Wohnort nur noch einmal.

Merke

DISTINCT steht direkt hinter SELECT und entfernt doppelte Zeilen aus dem Ergebnis. Bei mehreren Attributen zählt die ganze Zeile: Eine Zeile fällt nur weg, wenn sie in allen ausgegebenen Attributen mit einer anderen übereinstimmt.
Aufgabe 6 🗄 Sportverein
Welche Sportarten bietet der Verein an? Gib jede Sportart nur einmal aus.
Datenbankschema „Sportverein“ anzeigen
mitglied (160 Datensätze)
  • 🔑 MitgliedID integer
  • Vorname varchar(30)
  • Nachname varchar(30)
  • Geburtsjahr integer
  • Wohnort varchar(30)
  • Eintritt date
  • Beitrag decimal(5,2)
mannschaft (9 Datensätze)
  • 🔑 MannschaftID integer
  • Name varchar(40)
  • Sportart varchar(20)
  • Altersklasse varchar(20)
  • Liga varchar(30)
  • TrainerID integer → mitglied.MitgliedID
spieler (124 Datensätze)
  • 🔑 MitgliedID integer → mitglied.MitgliedID
  • 🔑 MannschaftID integer → mannschaft.MannschaftID
  • Trikotnummer integer
  • Position varchar(20)
spiel (61 Datensätze)
  • 🔑 SpielID integer
  • MannschaftID integer → mannschaft.MannschaftID
  • Datum date
  • Gegner varchar(40)
  • Heimspiel integer
  • PunkteEigene integer
  • PunkteGegner integer

🔑 Primärschlüssel · → Fremdschlüssel (verweist auf Tabelle.Attribut)

Struktur vorgeben:

Ohne Anmeldung wird deine Abfrage nicht gespeichert.

Multiple Choice

Welche Abfrage liefert garantiert nie zwei gleiche Zeilen?

4 Neu: Rechnen in SQL

Mit Zahl-Attributen kannst du rechnen: +, -, * und /. Eine Rechnung darf hinter SELECT stehen (dann entsteht eine neue Spalte) und in der WHERE-Bedingung.

SELECT Vorname, Nachname, 2026 - Geburtsjahr AS Lebensalter
  FROM mitglied
 WHERE 2026 - Geburtsjahr < 12
VornameNachnameLebensalter
BenKraus10
LucaWerner10
………

Mit AS gibst du der berechneten Spalte einen Namen. Ohne AS heißt die Spalte „2026 - Geburtsjahr“.

Achtung

  • Teilst du zwei ganze Zahlen, schneidet die Datenbank die Nachkommastellen ab: 7 / 2 ergibt 3. Mit 7.0 / 2 erhältst du 3.5.
  • Manche Wörter gehören zur Sprache SQL selbst und können nicht einfach als Name dienen, z. B. Alter (wegen ALTER) oder Order.
Aufgabe 7 🗄 Sportverein
Der Verein ehrt alle Mitglieder, die 2026 mindestens 65 Jahre alt werden. Gib Vorname, Nachname und Alter (2026 minus Geburtsjahr) dieser Mitglieder aus.
Datenbankschema „Sportverein“ anzeigen
mitglied (160 Datensätze)
  • 🔑 MitgliedID integer
  • Vorname varchar(30)
  • Nachname varchar(30)
  • Geburtsjahr integer
  • Wohnort varchar(30)
  • Eintritt date
  • Beitrag decimal(5,2)
mannschaft (9 Datensätze)
  • 🔑 MannschaftID integer
  • Name varchar(40)
  • Sportart varchar(20)
  • Altersklasse varchar(20)
  • Liga varchar(30)
  • TrainerID integer → mitglied.MitgliedID
spieler (124 Datensätze)
  • 🔑 MitgliedID integer → mitglied.MitgliedID
  • 🔑 MannschaftID integer → mannschaft.MannschaftID
  • Trikotnummer integer
  • Position varchar(20)
spiel (61 Datensätze)
  • 🔑 SpielID integer
  • MannschaftID integer → mannschaft.MannschaftID
  • Datum date
  • Gegner varchar(40)
  • Heimspiel integer
  • PunkteEigene integer
  • PunkteGegner integer

🔑 Primärschlüssel · → Fremdschlüssel (verweist auf Tabelle.Attribut)

Struktur vorgeben:

Ohne Anmeldung wird deine Abfrage nicht gespeichert.

Aufgabe 8 🗄 Buchhandlung
Rabattaktion in der Buchhandlung „Seitenwind“ (erfunden): Alle Comics gibt es 20 % günstiger. Gib Titel, Preis und reduzierten Preis aller Comics aus.
Datenbankschema „Buchhandlung“ anzeigen
autor (20 Datensätze)
  • 🔑 AutorID integer
  • Vorname varchar(30)
  • Nachname varchar(30)
  • Geburtsjahr integer
  • Land varchar(30)
verlag (7 Datensätze)
  • 🔑 VerlagID integer
  • Name varchar(40)
  • Ort varchar(30)
buch (112 Datensätze)
  • 🔑 ISBN varchar(17)
  • Titel varchar(60)
  • AutorID integer → autor.AutorID
  • VerlagID integer → verlag.VerlagID
  • Genre varchar(20)
  • Jahr integer
  • Seiten integer
  • Preis decimal(5,2)
  • Bestand integer
kunde (70 Datensätze)
  • 🔑 KundeID integer
  • Vorname varchar(30)
  • Nachname varchar(30)
  • Wohnort varchar(30)
bestellung (180 Datensätze)
  • 🔑 BestellID integer
  • KundeID integer → kunde.KundeID
  • Datum date
bestellposten (299 Datensätze)
  • 🔑 BestellID integer → bestellung.BestellID
  • 🔑 ISBN varchar(17) → buch.ISBN
  • Menge integer

🔑 Primärschlüssel · → Fremdschlüssel (verweist auf Tabelle.Attribut)

Struktur vorgeben:

Ohne Anmeldung wird deine Abfrage nicht gespeichert.

✏️ Übungen zu diesem Kapitel

23 freiwillige Aufgaben zum Üben und Weiterdenken.

Zu den Übungen →