Lernziele
- Eine einfache SELECT-Abfrage lesen können
- Filtern mit WHERE verstehen
- Den Sinn eines JOIN begreifen
Daten abfragen mit SELECT
SELECT name, email
FROM kunden
WHERE stadt = 'Ratingen'
AND aktiv = true
ORDER BY name;Tabellen verknüpfen mit JOIN
Ein JOIN verbindet Zeilen aus mehreren Tabellen über gemeinsame Schlüssel — etwa Kunden mit ihren Bestellungen. Das ist die eigentliche Stärke relationaler Datenbanken.
SELECT k.name, b.betrag
FROM kunden k
JOIN bestellungen b ON b.kunde_id = k.id;SQL beschreibt das Was, nicht das Wie
SQL ist eine deklarative Sprache: Man beschreibt, welches Ergebnis man haben möchte, nicht, wie die Datenbank es beschaffen soll. Man sagt „gib mir alle aktiven Kunden aus Ratingen, sortiert nach Name“ — den optimalen Weg dorthin sucht die Datenbank selbst. Dieses Prinzip macht SQL erstaunlich zugänglich: Die Grundstruktur aus SELECT, FROM und WHERE liest sich fast wie ein englischer Satz und ist in wenigen Stunden erlernt.
Zusammenfassen mit GROUP BY
Oft will man nicht einzelne Zeilen, sondern verdichtete Zahlen: Wie viele Bestellungen pro Kunde? Welcher Umsatz pro Monat? Dafür fasst SQL Zeilen mit GROUP BY zu Gruppen zusammen und rechnet mit Aggregatfunktionen wie COUNT, SUM oder AVG. So verwandelt eine einzige Abfrage tausende Rohdaten in eine aussagekräftige Auswertung — der Grund, warum SQL auch im Reporting und in der Datenanalyse unverzichtbar ist.
SELECT kunde_id, SUM(betrag) AS umsatz
FROM bestellungen
GROUP BY kunde_id
HAVING SUM(betrag) > 1000
ORDER BY umsatz DESC;Daten schreiben und verändern
SQL fragt nicht nur ab, es verändert auch. Mit INSERT legt man neue Datensätze an, mit UPDATE ändert man bestehende, mit DELETE entfernt man sie. Diese Befehle sind mächtig — und gefährlich: Ein UPDATE oder DELETE ohne passende WHERE-Bedingung trifft die gesamte Tabelle. Deshalb prüft man solche Abfragen im Zweifel erst als SELECT, bevor man sie ausführt, und arbeitet bei kritischen Änderungen in einer Transaktion.
Welche JOIN-Arten es gibt
Das schlichte JOIN aus dem Beispiel oben ist genau genommen ein INNER JOIN: Es liefert nur Zeilen, für die es auf beiden Seiten einen Treffer gibt. Ein Kunde ohne Bestellung taucht dort schlicht nicht auf — was oft übersehen wird und Auswertungen unbemerkt verfälscht. Soll die linke Tabelle vollständig erhalten bleiben und für fehlende Gegenstücke einfach nichts eingetragen werden, nutzt man LEFT JOIN. RIGHT JOIN dreht dieses Verhalten um, FULL OUTER JOIN behält beide Seiten. Die Faustregel: Sobald eine Frage mit „auch die ohne …“ beginnt, ist ein LEFT JOIN gefragt.
SELECT k.name, COUNT(b.id) AS anzahl_bestellungen
FROM kunden k
LEFT JOIN bestellungen b ON b.kunde_id = k.id
GROUP BY k.name
ORDER BY anzahl_bestellungen DESC;Unterabfragen, CTEs und Views
Komplexe Fragen lassen sich in SQL in Zwischenschritte zerlegen. Eine Unterabfrage steht in Klammern innerhalb einer anderen Abfrage und liefert ihr ein Zwischenergebnis, etwa die Liste aller Kunden-IDs mit Umsatz über einer Schwelle. Lesbarer wird es mit einer benannten Zwischenabfrage, die mit WITH eingeleitet wird — der sogenannten CTE: Sie steht am Anfang, bekommt einen sprechenden Namen und wird darunter wie eine normale Tabelle verwendet. Braucht man dieselbe Auswertung immer wieder, speichert man sie als View — eine gespeicherte Abfrage, die sich anschließend abfragen lässt, als wäre sie eine Tabelle.
Wichtige Begriffe
- SELECT
- Fragt Daten aus Tabellen ab.
- WHERE
- Filtert Zeilen nach Bedingungen.
- JOIN
- Verknüpft Zeilen mehrerer Tabellen.
- Prepared Statement
- Sichere, parametrisierte Abfrage.
- LEFT JOIN
- Behält alle Zeilen der linken Tabelle, auch ohne Treffer rechts.
- View
- Gespeicherte Abfrage, die sich wie eine Tabelle nutzen lässt.
Typische Fehler
- Nutzereingaben ungeprüft in SQL einbauen (SQL-Injection)
- SELECT * statt gezielter Spalten
- Fehlende Indizes bei JOINs auf große Tabellen
Best Practices
- Immer Prepared Statements verwenden
- Nur benötigte Spalten selektieren
- Abfragen mit EXPLAIN analysieren, wenn sie langsam sind
Zusammenfassung
SQL fragt relationale Datenbanken ab: SELECT holt Daten, WHERE filtert, JOIN verknüpft Tabellen. Für sichere Anwendungen sind parametrisierte Abfragen Pflicht, um SQL-Injection zu verhindern.
Häufige Fragen
Grundlagen ja. ORMs (wie Prisma) abstrahieren SQL, aber bei Performance-Problemen und komplexen Abfragen ist SQL-Verständnis unverzichtbar.
Braucht ihr Unterstützung bei Softwareentwicklung?
Wir setzen genau solche Themen in echte Projekte um.
