Rusko Group
DatenbankenFortgeschritten 4 Min. Lesezeit

SQL verstehen: SELECT, WHERE und JOIN

SQL (Structured Query Language) ist die Standardsprache, um mit relationalen Datenbanken zu sprechen. Mit ihr fragt man Daten ab, filtert, verknüpft Tabellen und verändert Datensätze.

Lernziele

  • Eine einfache SELECT-Abfrage lesen können
  • Filtern mit WHERE verstehen
  • Den Sinn eines JOIN begreifen

Daten abfragen mit SELECT

sql
SELECT name, email
FROM kunden
WHERE stadt = 'Ratingen'
  AND aktiv = true
ORDER BY name;
Alle aktiven Kunden aus Ratingen

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.

sql
SELECT k.name, b.betrag
FROM kunden k
JOIN bestellungen b ON b.kunde_id = k.id;
Kunden mit ihren Bestellungen

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.

sql
SELECT kunde_id, SUM(betrag) AS umsatz
FROM bestellungen
GROUP BY kunde_id
HAVING SUM(betrag) > 1000
ORDER BY umsatz DESC;
Umsatz je Kunde zusammenrechnen

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.

sql
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;
Alle Kunden – auch die ohne Bestellung

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.

#SQL#Datenbank#Backend

Braucht ihr Unterstützung bei Softwareentwicklung?

Wir setzen genau solche Themen in echte Projekte um.

Projekt unverbindlich anfragen