Fast jede Software, die du täglich nutzt, speichert ihre Daten in einer Datenbank – und die Sprache, mit der man diese Daten abfragt und verändert, heißt SQL (Structured Query Language). Egal ob du eine Webseite baust, Datenanalysen machst oder einfach verstehen willst, wie deine Lieblings-App im Hintergrund arbeitet: SQL zu beherrschen ist eine der nützlichsten Fähigkeiten überhaupt. Die gute Nachricht: Die Grundlagen sind erstaunlich schnell gelernt. In diesem Artikel führe ich dich Schritt für Schritt durch die wichtigsten Befehle.
Was ist SQL eigentlich?
SQL ist keine Programmiersprache im klassischen Sinne, sondern eine deklarative Abfragesprache. Das bedeutet: Du beschreibst, was du haben möchtest, nicht wie die Datenbank das im Detail beschaffen soll. Du sagst "gib mir alle Kunden aus Berlin" – und die Datenbank kümmert sich selbst darum, wie sie diese Daten am effizientesten findet.
SQL wurde in den 1970er-Jahren bei IBM entwickelt und ist seit 1986 ein ISO-Standard. Praktisch jede relationale Datenbank spricht SQL: MySQL, PostgreSQL, SQLite, Microsoft SQL Server, Oracle und viele mehr. Die Grundbefehle funktionieren überall fast identisch, nur bei Spezialfunktionen gibt es Dialekt-Unterschiede.
Tabellen, Zeilen und Spalten
Bevor wir Befehle schreiben, musst du das Datenmodell verstehen. In einer relationalen Datenbank werden Daten in Tabellen organisiert. Eine Tabelle ähnelt einer Tabelle in einer Tabellenkalkulation:
- Spalten (Columns) definieren die Eigenschaften – zum Beispiel
id,name,email,stadt. Jede Spalte hat einen Datentyp (Text, Zahl, Datum etc.). - Zeilen (Rows) sind die einzelnen Datensätze – ein konkreter Kunde mit seinen Werten in jeder Spalte.
- Primärschlüssel (Primary Key) ist eine Spalte, die jede Zeile eindeutig identifiziert, meist eine fortlaufende
id.
Für die folgenden Beispiele stell dir eine Tabelle namens kunden vor, mit den Spalten id, name, stadt und umsatz.
SELECT: Daten abfragen
Der mit Abstand häufigste SQL-Befehl ist SELECT. Damit liest du Daten aus einer oder mehreren Tabellen. Die einfachste Form holt alle Spalten und alle Zeilen:
SELECT * FROM kunden;
Das Sternchen * steht für "alle Spalten". In der Praxis solltest du aber nur die Spalten anfordern, die du wirklich brauchst – das ist schneller und macht deinen Code lesbarer:
SELECT name, stadt FROM kunden;
Der Befehl gibt dir nur die Namen und Städte aller Kunden zurück. Beachte das Semikolon am Ende: Es schließt den Befehl ab und ist in den meisten Datenbanken Pflicht, sobald du mehrere Befehle hintereinander ausführst.
WHERE: Daten filtern
Selten willst du wirklich alle Zeilen sehen. Mit der WHERE-Klausel filterst du nach Bedingungen:
SELECT name, umsatz FROM kunden WHERE stadt = 'Berlin';
Das liefert nur Kunden aus Berlin. Du kannst Bedingungen mit Vergleichsoperatoren und logischen Verknüpfungen kombinieren:
WHERE umsatz > 1000– Umsatz größer als 1000WHERE stadt = 'Berlin' AND umsatz > 500– beide Bedingungen müssen erfüllt seinWHERE stadt = 'Berlin' OR stadt = 'Hamburg'– eine der Bedingungen genügtWHERE name LIKE 'M%'– alle Namen, die mit "M" beginnen (das Prozentzeichen ist ein Platzhalter)WHERE stadt IN ('Berlin', 'Hamburg', 'München')– Stadt ist eine aus der ListeWHERE umsatz BETWEEN 500 AND 1500– Umsatz im Bereich
Achte auf einfache Anführungszeichen bei Textwerten – Zahlen werden ohne geschrieben.
ORDER BY: Ergebnisse sortieren
Standardmäßig gibt die Datenbank Zeilen in unbestimmter Reihenfolge zurück. Mit ORDER BY sortierst du sie:
SELECT name, umsatz FROM kunden ORDER BY umsatz DESC;
DESC sortiert absteigend (höchster Umsatz zuerst), ASC aufsteigend (Standard, wenn nichts angegeben ist). Du kannst auch nach mehreren Spalten sortieren: ORDER BY stadt ASC, umsatz DESC sortiert erst alphabetisch nach Stadt und innerhalb jeder Stadt nach Umsatz.
LIMIT: Anzahl begrenzen
Bei großen Tabellen willst du oft nur die ersten Ergebnisse. Mit LIMIT (in SQL Server heißt es TOP) begrenzt du die Trefferzahl:
SELECT name, umsatz FROM kunden ORDER BY umsatz DESC LIMIT 10;
Das ist die klassische "Top 10"-Abfrage: die zehn umsatzstärksten Kunden. Kombiniert mit ORDER BY ist LIMIT ein extrem nützliches Werkzeug für Ranglisten und Paginierung.
INSERT: Neue Daten einfügen
Mit INSERT INTO fügst du neue Zeilen hinzu:
INSERT INTO kunden (name, stadt, umsatz) VALUES ('Lena Schmidt', 'Köln', 2400);
Du gibst zuerst die Spalten an, in die du schreiben willst, dann die passenden Werte. Die id lässt du hier weg – sie wird meist automatisch von der Datenbank vergeben (Auto-Increment). Du kannst auch mehrere Zeilen auf einmal einfügen, indem du mehrere Wertegruppen mit Kommas trennst.
UPDATE: Daten ändern
Bestehende Daten änderst du mit UPDATE:
UPDATE kunden SET umsatz = 3000 WHERE name = 'Lena Schmidt';
Ganz wichtig: Vergiss niemals die WHERE-Klausel bei UPDATE! Lässt du sie weg, ändert SQL jede einzelne Zeile der Tabelle. Ein UPDATE kunden SET umsatz = 0; ohne WHERE setzt den Umsatz aller Kunden auf null. Dieser Fehler hat schon viele Datenbanken verwüstet. Bevor du ein UPDATE ausführst, teste die Bedingung erst mit einem SELECT und derselben WHERE-Klausel.
DELETE: Daten löschen
Zum Löschen von Zeilen dient DELETE:
DELETE FROM kunden WHERE id = 42;
Genau wie bei UPDATE gilt: Ohne WHERE löscht du alle Zeilen der Tabelle. Auch hier lohnt es sich, vorher ein SELECT * FROM kunden WHERE id = 42; auszuführen, um sicherzugehen, dass du genau die richtigen Datensätze triffst.
GROUP BY und Aggregatfunktionen
Richtig spannend wird SQL, wenn du Daten zusammenfasst. Mit Aggregatfunktionen berechnest du Werte über mehrere Zeilen:
COUNT()– zählt ZeilenSUM()– summiert WerteAVG()– berechnet den DurchschnittMIN()/MAX()– kleinster / größter Wert
In Kombination mit GROUP BY rechnest du pro Gruppe. Diese Abfrage zeigt den Gesamtumsatz pro Stadt:
SELECT stadt, SUM(umsatz) AS gesamt FROM kunden GROUP BY stadt ORDER BY gesamt DESC;
Das AS gesamt gibt der berechneten Spalte einen Namen (Alias). Möchtest du nach dem aggregierten Wert filtern, nutzt du HAVING statt WHERE – denn WHERE filtert einzelne Zeilen, HAVING filtert Gruppen: GROUP BY stadt HAVING SUM(umsatz) > 5000.
Übersicht: Die logische Reihenfolge
SQL-Befehle werden in einer festen Reihenfolge geschrieben, die du dir merken solltest:
- SELECT – welche Spalten
- FROM – aus welcher Tabelle
- WHERE – welche Zeilen filtern
- GROUP BY – wonach gruppieren
- HAVING – Gruppen filtern
- ORDER BY – wie sortieren
- LIMIT – wie viele
Wo übe ich am besten?
Der schnellste Einstieg gelingt mit SQLite – einer dateibasierten Datenbank ohne Server, die du sofort lokal nutzen kannst. Tools wie DB Browser for SQLite bieten eine grafische Oberfläche zum Ausprobieren. Auch in vielen Programmierumgebungen ist SQLite direkt eingebaut.
Wenn du regelmäßig mit Datenformaten oder Zeichenketten arbeitest, findest du im Webtools-Bereich von kotsch.tech praktische Helfer – etwa zum Formatieren von Text oder Konvertieren von Datenformaten, die sich gut mit Datenbankarbeit kombinieren lassen. Für ein tieferes Verständnis, wann sich welche Datenbank lohnt, lies auch unseren Vergleich von SQLite und MySQL.
Häufige Fragen
Ist SQL schwer zu lernen?
Die Grundlagen – SELECT, WHERE, INSERT, UPDATE, DELETE – lernst du an einem Nachmittag. Komplexere Themen wie Joins über mehrere Tabellen, Subqueries und Performance-Optimierung brauchen etwas mehr Übung, sind aber gut nachvollziehbar, wenn du das Datenmodell verstanden hast.
Werden SQL-Befehle groß oder klein geschrieben?
SQL ist bei Schlüsselwörtern nicht case-sensitiv – select und SELECT funktionieren beide. Konvention ist jedoch, Schlüsselwörter groß und Tabellen-/Spaltennamen klein zu schreiben. Achtung: Bei einigen Datenbanken sind Tabellennamen selbst je nach Konfiguration case-sensitiv.
Was ist der Unterschied zwischen WHERE und HAVING?
WHERE filtert einzelne Zeilen, bevor gruppiert wird. HAVING filtert nach der Gruppierung anhand von Aggregatwerten. Du kannst beide in einer Abfrage kombinieren.
Kann ich mit SQL versehentlich Daten zerstören?
Ja – vor allem UPDATE und DELETE ohne WHERE sind gefährlich. Arbeite zuerst mit Testdaten, mache regelmäßige Backups und teste die WHERE-Bedingung immer erst mit einem SELECT, bevor du löschst oder änderst.