Q2.2 – SQL
Daten mit der Structured Query Language abfragen, auswerten und bearbeitenIn Q2.1 wurden fachliche Zusammenhänge als relationale Struktur modelliert. Q2.2 zeigt nun die zugehörige Arbeitssprache: SQL.
SQL dient nicht nur zum Anzeigen von Daten. Es unterstützt auch Auswertung, Verknüpfung und kontrollierte Bearbeitung von Datensätzen in den Tabellen, die über Primärschlüssel und Fremdschlüssel verbunden sind.
Kerncurriculum kompakt
Einordnung und Lernziele des Themenfelds Q2.2
Einordnung und Lernziele des Themenfelds Q2.2
A) Allgemeine Einordnung
Q2.2 schließt direkt an Q2.1 an: Aus der relationalen Datenstruktur wird nun die operative Arbeit mit Datenbeständen. SQL ist dabei die zentrale Arbeitssprache, um Informationen gezielt auszulesen, auszuwerten und kontrolliert zu verändern.
Die Kompetenzentwicklung folgt einer klaren Progression: Selektion und Projektion bilden den Einstieg, danach folgen Aggregation, JOIN, GROUP BY/HAVING, Unterabfragen und schließlich Datenbearbeitung mit DML.
B) Anforderungen nach Kursniveau
Grundlegendes Niveau
Im grundlegenden Niveau werden tragfähige SELECT-Strategien aufgebaut. Dazu gehören Projektion (Spaltenauswahl) und Selektion (Filterung mit WHERE) als Basismuster jeder Abfrage.
Darauf aufbauend nutzen Lernende Aggregatfunktionen zur Verdichtung, JOIN zur Verknüpfung mehrerer Tabellen, Sortierung über ORDER BY sowie Gruppierung mit GROUP BY und HAVING für auswertende Fragestellungen.
Erhöhtes Niveau (Leistungskurs)
Im erhöhten Niveau werden weiterführende SELECT-Abfragen entwickelt: insbesondere Unterabfragen und komplexere, verschachtelte Abfragelogik über mehrere Bedingungen und Auswertungsebenen.
Zusätzlich werden weitere SQL-Sprachbereiche eingeordnet: DML (INSERT, UPDATE, DELETE) zur Datenbearbeitung, DDL (z. B. CREATE TABLE) konzeptionell zur Strukturdefinition sowie optional DCL als Überblick über Berechtigungssteuerung.
Daten mit SQL abfragen
SELECT, FROM, WHERE und grundlegende Filterung
SELECT, FROM, WHERE und grundlegende Filterung
Wir arbeiten durchgehend mit einer reduzierten Unterrichtsdatenbank aus dem Q2.1-Kontext „Buchhandel/Schulbibliothek":
buch(id, titel, preis, bestand, verlag_id)
autor(id, name)
schreibt(buch_id, autor_id)
verlag(id, name, ort)
kurs(id, bezeichnung, lehrkraft)
leihe(id, buch_id, kurs_id, rueckgabedatum)
SQL beschreibt, welches Ergebnis benötigt wird. Das Datenbanksystem entscheidet intern, wie dieses Ergebnis effizient erzeugt wird.
Für die Grundlogik einer SELECT-Anfrage ist die Unterscheidung zentral: Projektion legt fest, welche Spalten angezeigt werden, und Selektion legt fest, welche Zeilen in das Ergebnis gelangen. Erst das Zusammenspiel beider Schritte erzeugt fachlich präzise Datensichten.
1) Grundform der SELECT-Abfrage
SELECT titel, preis
FROM buch
WHERE preis <= 20.00;
| titel | preis |
|---|---|
| SQL im Unterricht | 19.90 |
| Netzwerke kompakt | 14.50 |
| Algorithmik verstehen | 17.80 |
| Informatik 1 | 12.00 |
Die Abfrage zeigt alle Bücher mit einem Preis von höchstens 20,00 €.
SELECT legt die Ausgabespalten fest, FROM die Datenquelle,
WHERE filtert Datensätze. Ohne Bedingung kann die WHERE-Klausel entfallen.
2) Spaltenwahl, * und Vergleichsoperatoren
SELECT *
FROM buch;
SELECT titel, bestand
FROM buch
WHERE bestand < 5;
| id | titel | preis | bestand | verlag_id |
|---|---|---|---|---|
| 12 | Datenbanken Basiswissen | 24.90 | 3 | 1 |
| 18 | Informatik 1 | 12.00 | 2 | 3 |
| 27 | Robotik Projekte | 29.50 | 4 | 5 |
SELECT * liefert alle Spalten; die zweite Abfrage filtert daraus Bücher mit kleinem Bestand.
Vergleichsoperatoren in WHERE:
=, <>, <, >, <=, >=.
Die WHERE-Klausel ist das zentrale Filterinstrument für Zeilen. Ohne
WHERE bezieht sich eine SELECT-Anfrage auf alle Datensätze der gewählten Tabelle;
mit WHERE wird die Ergebnismenge fachlich begründet eingeschränkt.
3) Logische Operatoren AND, OR, NOT
SELECT titel, preis, bestand
FROM buch
WHERE preis < 15
AND bestand > 0;
SELECT titel
FROM buch
WHERE titel LIKE 'Daten%'
OR titel LIKE 'Informatik%';
SELECT titel
FROM buch
WHERE NOT bestand = 0;
| titel |
|---|
| Informatik 1 |
| Datenstrukturen verstehen |
| SQL im Unterricht |
| Algorithmik verstehen |
Die gezeigten Filter verknüpfen Bedingungen und schließen nur Titel mit Bestand 0 aus.
4) Bereichs-, Muster- und Listenfilter
-- BETWEEN (inklusive Grenzen)
SELECT titel, preis
FROM buch
WHERE preis BETWEEN 10 AND 25;
-- LIKE (% = Zeichenfolge, _ = genau ein Zeichen)
SELECT name
FROM autor
WHERE name LIKE 'M%';
-- IN mit Werteliste
SELECT titel, verlag_id
FROM buch
WHERE verlag_id IN (1, 3, 5);
| titel | verlag_id |
|---|---|
| Datenbanken Basiswissen | 1 |
| Informatik 1 | 3 |
| Robotik Projekte | 5 |
| Datenstrukturen verstehen | 1 |
Bei IN bleiben nur Bücher aus den ausgewählten Verlagen im Ergebnis.
LIKE eignet sich für Mustervergleiche in Textfeldern, IN für
feste Wertemengen und BETWEEN für zusammenhängende Intervalle. Diese drei
Varianten decken typische schulische Suchsituationen ab und machen Filterbedingungen lesbarer
als lange Ketten mit OR.
5) NULL-Prüfung
SELECT id, buch_id, kurs_id
FROM leihe
WHERE rueckgabedatum IS NULL;
| id | buch_id | kurs_id |
|---|---|---|
| 301 | 18 | 7 |
| 309 | 27 | 11 |
| 312 | 12 | 7 |
IS NULL markiert aktuell noch nicht zurückgegebene Ausleihen.
NULL bedeutet „kein eingetragener Wert“ und ist nicht dasselbe wie 0
oder ein leerer String. Deshalb wird mit IS NULL beziehungsweise
IS NOT NULL geprüft und nicht mit = NULL.
6) DISTINCT, AS, ORDER BY, LIMIT
SELECT DISTINCT verlag_id
FROM buch;
SELECT titel AS buchtitel, preis AS europreis
FROM buch
ORDER BY europreis DESC, buchtitel ASC
LIMIT 5;
SELECT titel, preis
FROM buch
ORDER BY preis ASC
LIMIT 3, 4;
| buchtitel | europreis |
|---|---|
| Robotik Projekte | 29.50 |
| Datenbanken Basiswissen | 24.90 |
| SQL im Unterricht | 19.90 |
| Algorithmik verstehen | 17.80 |
| Netzwerke kompakt | 14.50 |
Aliasnamen, Sortierung und LIMIT machen den Ausgabeausschnitt klar strukturiert.
DISTINCT entfernt Dubletten in der Ausgabe, AS sorgt für klare
Spaltenbezeichnungen, ORDER BY macht Reihenfolgen nachvollziehbar und
LIMIT begrenzt Ergebnismengen auf einen didaktisch sinnvollen Ausschnitt.
Eine gute SELECT-Anfrage beginnt nicht mit einem Befehl, sondern mit einer präzisen Frage: Welche Information wird für welche Entscheidung benötigt?
Passende SQL-Übungen
Vertiefe dieses Kapitel im Übungsbereich: Grundlagen von SELECT und Filtern und Bedingungen.
Daten auswerten mit Aggregatfunktionen
COUNT, SUM, MIN, MAX und AVG
COUNT, SUM, MIN, MAX und AVG
Aggregatfunktionen verdichten viele Zeilen zu einem Kennwert. Damit wechselt die Perspektive von der Einzeldatensatzsicht zur zusammenfassenden Auswertung.
Damit entsteht ein anderer Typ von Anfrage: Nicht einzelne Bücher oder Kurse stehen im Zentrum, sondern Muster und Kennzahlen des Gesamtbestands. Aggregatfunktionen beantworten daher eher Steuerungs- und Überblicksfragen als Detailfragen.
Einzeldaten beantworten Detailfragen („Welches Buch kostet 12,90 €?“), Aggregatwerte beantworten Strukturfragen („Wie hoch ist der Durchschnittspreis aller Bücher?“).
SELECT COUNT(*) AS anzahl_buecher
FROM buch;
SELECT COUNT(DISTINCT verlag_id) AS anzahl_verlage
FROM buch;
SELECT SUM(bestand) AS gesamtbestand
FROM buch;
SELECT MIN(preis) AS guenstigstes_buch,
MAX(preis) AS teuerstes_buch,
AVG(preis) AS durchschnittspreis
FROM buch;
| guenstigstes_buch | teuerstes_buch | durchschnittspreis |
|---|---|---|
| 12.00 | 29.50 | 19.22 |
Aggregatfunktionen verdichten viele Buchzeilen zu kompakten Kennzahlen.
Auch wenn die Syntax knapp wirkt, verändert sich die Aussageebene deutlich: Das Ergebnis enthält
keine vollständigen Datensätze, sondern berechnete Werte über viele Datensätze hinweg. Diese
Verdichtung ist die fachliche Vorbereitung auf GROUP BY, bei dem Kennzahlen je Gruppe
statt nur für die Gesamttabelle gebildet werden.
Fachlich wichtig: Ohne Gruppierung kann eine Anfrage nicht gleichzeitig frei gewählte
Einzelattribute und Aggregatwerte ausgeben. Diese Einschränkung wird im nächsten Kapitel
über GROUP BY systematisch aufgelöst.
Passende SQL-Übungen
Übe diesen Schwerpunkt in Auswerten mit Aggregatfunktionen.
Tabellen verknüpfen mit JOIN
Zusammenhänge zwischen Tabellen auswerten
Zusammenhänge zwischen Tabellen auswerten
Das relationale Modell trennt Informationen auf mehrere Tabellen, um Redundanz zu vermeiden. Die Zusammenführung geschieht über Schlüsselbeziehungen. Genau hier wird der Übergang von Q2.1 (Modellierung) zu Q2.2 (Abfragesprache) besonders sichtbar.
Ohne JOIN würden wichtige Fachfragen unbeantwortet bleiben, weil relevante Attribute in unterschiedlichen Tabellen liegen. JOIN ist deshalb kein Zusatztrick, sondern die notwendige Brücke zwischen normalisierter Tabellenstruktur und auswertbarer Gesamtsicht.
Ein Join verknüpft Datensätze aus zwei oder mehr Tabellen über eine explizite Join-Bedingung, meist Primärschlüssel = Fremdschlüssel.
Einfacher INNER JOIN
SELECT b.titel, v.name AS verlag, v.ort
FROM buch AS b
INNER JOIN verlag AS v
ON b.verlag_id = v.id;
| titel | verlag | ort |
|---|---|---|
| Datenbanken Basiswissen | Lernwerk Verlag | Kassel |
| Informatik 1 | Campus Medien | Göttingen |
| Robotik Projekte | Zukunft Verlag | Hannover |
| SQL im Unterricht | Nordlicht Verlag | Hamburg |
Der Join ergänzt jeden Buchtitel um die Verlagsinformationen.
Tabellenqualifizierte Attributnamen (b.titel, v.name) sind zentral,
sobald gleichnamige Spalten in mehreren Tabellen vorkommen.
Fachlich tragen dabei Primär- und Fremdschlüssel die Zuordnung: Der Primärschlüssel identifiziert einen Datensatz eindeutig, der Fremdschlüssel verweist auf diesen Datensatz in einer anderen Tabelle. Die JOIN-Bedingung bildet genau diese definierte Beziehung ab.
Mehrere Joins mit Aliasen
SELECT b.titel,
a.name AS autor,
v.name AS verlag
FROM buch AS b
INNER JOIN schreibt AS s ON s.buch_id = b.id
INNER JOIN autor AS a ON a.id = s.autor_id
INNER JOIN verlag AS v ON v.id = b.verlag_id
ORDER BY a.name, b.titel;
| titel | autor | verlag |
|---|---|---|
| Algorithmik verstehen | Ayşe Mertens | Lernwerk Verlag |
| Informatik 1 | Jonas Richter | Campus Medien |
| SQL im Unterricht | Jonas Richter | Nordlicht Verlag |
| Robotik Projekte | Mara König | Zukunft Verlag |
Über die Beziehungstabelle schreibt werden Buch, Autor und Verlag zusammengeführt.
Die Tabelle schreibt repräsentiert die n:m-Beziehung zwischen
buch und autor. Ohne diese Beziehungstabelle wäre die Abfrage
„Welcher Autor schrieb welchen Titel?“ nicht konsistent modellierbar.
Passende SQL-Übungen
Dazu passt die Übungssektion Tabellen verknüpfen mit JOIN.
Datensätze gruppieren
GROUP BY und HAVING
GROUP BY und HAVING
GROUP BY bündelt Datensätze nach einem oder mehreren Attributen; Aggregatfunktionen
werden anschließend je Gruppe berechnet.
Damit entsteht eine neue Sicht auf Daten: Statt Einzelzeilen zu betrachten, werden Teilmengen mit gemeinsamer Eigenschaft (z. B. pro Verlag oder pro Kurs) als analytische Einheiten ausgewertet.
SELECT v.name AS verlag,
COUNT(*) AS titelanzahl,
AVG(b.preis) AS durchschnittspreis
FROM buch AS b
INNER JOIN verlag AS v ON v.id = b.verlag_id
GROUP BY v.name;
| verlag | titelanzahl | durchschnittspreis |
|---|---|---|
| Lernwerk Verlag | 2 | 21.35 |
| Campus Medien | 2 | 14.90 |
| Zukunft Verlag | 1 | 29.50 |
Jede Verlagsgruppe erhält ihre eigene Kennzahlzeile.
WHERE und HAVING unterscheiden
WHERE filtert Zeilen vor der Gruppierung.
HAVING filtert Gruppen nach der Aggregation.
SELECT v.name AS verlag,
COUNT(*) AS titelanzahl
FROM buch AS b
INNER JOIN verlag AS v ON v.id = b.verlag_id
WHERE b.preis >= 15
GROUP BY v.name
HAVING COUNT(*) >= 2
ORDER BY titelanzahl DESC;
| verlag | titelanzahl |
|---|---|
| Lernwerk Verlag | 2 |
| Nordlicht Verlag | 2 |
Nur Verlage mit mindestens zwei Titeln ab 15 € bleiben nach HAVING erhalten.
WHERE entscheidet, welche Zeilen in die Gruppierung eingehen. HAVING entscheidet, welche bereits gebildeten Gruppen im Ergebnis bleiben. Beide Klauseln ergänzen sich, ersetzen sich aber nicht.
In einer gruppierten Anfrage dürfen im SELECT-Teil nur Gruppierungsattribute oder Aggregatwerte stehen. Einzelattribute ohne Gruppierung erzeugen fachlich uneindeutige Ergebnisse.
Passende SQL-Übungen
Direkt weiter mit Gruppieren mit GROUP BY und HAVING.
Überblick: SQL-Klauseln in der Verarbeitungsperspektive
Prozesslogik von FROM bis LIMIT
Prozesslogik von FROM bis LIMIT
Überblick: SQL-Klauseln in der Verarbeitungsperspektive
Für die Analyse hilft diese Reihenfolge der Verarbeitung: vom Festlegen der Datenbasis bis zur finalen Ausgabe.
-
Tabellen als Datenquelle bestimmen
FROM -
Tabellen über Schlüssel verknüpfen
JOIN ... ON -
Datensätze vor der Gruppierung filtern
WHERE -
Datensätze zu Gruppen zusammenfassen
GROUP BY -
Gruppen nach Aggregation filtern
HAVING -
Ergebnisspalten für die Ausgabe festlegen
SELECT -
Ergebnisdarstellung sortieren
ORDER BY -
Ausgabe auf einen Ausschnitt begrenzen
LIMIT
Unterabfragen formulieren
Geschachtelte SELECT-Anweisungen
Geschachtelte SELECT-Anweisungen
Unterabfragen (Subqueries) zerlegen komplexe Fragestellungen in Teilfragen. Die innere Anfrage liefert Werte, die von der äußeren Anfrage weiterverwendet werden.
Unterabfragen sind besonders dann sinnvoll, wenn ein Zwischenergebnis zuerst berechnet werden muss, bevor die eigentliche Filterung möglich ist, etwa bei Vergleichen mit Mittelwerten oder dynamisch bestimmten Wertelisten.
Fall A: Unterabfrage liefert genau einen Wert
SELECT titel, preis
FROM buch
WHERE preis > (
SELECT AVG(preis)
FROM buch
);
| titel | preis |
|---|---|
| Robotik Projekte | 29.50 |
| Datenbanken Basiswissen | 24.90 |
| SQL im Unterricht | 19.90 |
Die äußere Abfrage übernimmt den berechneten Durchschnittspreis als Vergleichswert.
Dieser Typ eignet sich für Vergleichsoperatoren wie > oder =, da
die äußere Bedingung genau einen Referenzwert benötigt.
Fall B: Unterabfrage liefert mehrere Werte
SELECT titel, verlag_id
FROM buch
WHERE verlag_id IN (
SELECT id
FROM verlag
WHERE ort = 'Kassel'
);
| titel | verlag_id |
|---|---|
| Datenbanken Basiswissen | 1 |
| Algorithmik verstehen | 1 |
| SQL Trainer | 8 |
IN prüft, ob der Verlag eines Buchs zur Kassel-Wertemenge gehört.
Liefert die innere Anfrage mehrere Werte, wird typischerweise IN verwendet. So kann
die äußere Anfrage prüfen, ob ein Attribut zu einer ganzen Wertemenge gehört.
Bei Vergleichsoperatoren (=, <, > ...) muss die Unterabfrage genau einen Wert liefern. Bei mehreren Werten wird typischerweise IN benötigt.
Unterabfragen sollen die Abfrage logisch klären, nicht verschleiern. Wenn dieselbe Aussage mit einem klaren Join einfacher lesbar ist, ist der Join meist didaktisch und technisch vorzuziehen.
Passende SQL-Übungen
Für diesen Abschnitt eignet sich Unterabfragen im SQL-Übungsbereich.
Daten bearbeiten
INSERT, UPDATE und DELETE
INSERT, UPDATE und DELETE
Mit SQL werden Datenbestände nicht nur gelesen, sondern auch verändert. Deshalb ist jede Änderungsanfrage fachlich zu begründen und vor Ausführung zu prüfen.
Im Unterschied zu SELECT greifen Änderungsbefehle direkt in die Datenintegrität ein. Besonders UPDATE und DELETE benötigen daher präzise Bedingungen, damit nur die fachlich beabsichtigten Datensätze betroffen sind.
INSERT
INSERT INTO verlag (id, name, ort)
VALUES (7, 'Nordlicht Verlag', 'Hamburg');
INSERT INTO buch (id, titel, preis, bestand, verlag_id)
VALUES (101, 'SQL im Unterricht', 19.90, 12, 7);
| id | titel | preis | bestand | verlag_id |
|---|---|---|---|---|
| 101 | SQL im Unterricht | 19.90 | 12 | 7 |
Nach INSERT ist der neue Titel mit Verlagsbezug in der Tabelle buch vorhanden.
UPDATE
UPDATE buch
SET preis = 18.90,
bestand = bestand + 5
WHERE id = 101;
| id | titel | preis | bestand |
|---|---|---|---|
| 101 | SQL im Unterricht | 18.90 | 17 |
UPDATE passt den Preis an und erhöht gleichzeitig den Bestand des gewählten Datensatzes.
DELETE
DELETE FROM buch
WHERE id = 101;
| id | titel | preis | bestand |
|---|---|---|---|
| 0 Zeilen (Datensatz mit id = 101 wurde entfernt) | |||
DELETE entfernt den betroffenen Buchdatensatz vollständig aus der Tabelle.
Fehlt die WHERE-Klausel, betrifft die Anweisung alle Datensätze einer Tabelle. In Unterricht und Praxis sollte daher vor jeder Änderung zunächst eine kontrollierende SELECT-Abfrage mit derselben Bedingung ausgeführt werden.
Erst Zielmenge mit SELECT prüfen, dann UPDATE oder DELETE mit identischer WHERE-Bedingung ausführen und abschließend das Ergebnis kontrollieren. So bleibt die Datenbearbeitung nachvollziehbar und konsistent.
Arbeits- und Transferpfad zu Q2.2
Nutze Q2.2 als Arbeitszyklus: anwenden, üben, rückmelden und übertragen.
Anwenden: Formuliere und prüfe Abfragen im SQL-Werkzeug, bevor du sie in Aufgabenserien übernimmst.
Üben und Rückmeldung: Bearbeite anschließend die SQL-Übungsaufgaben und nutze bei Bedarf die SQL-Auswertung, um Ergebnisse zu kontrollieren.
Transfer: In Q2.3 wird diese SQL-Praxis zur projektorientierten Arbeit mit komplexeren Datenbeständen weitergeführt.