SQL
Kurz: “Structured Query Language” — die Standardsprache, um relationale Datenbanken abzufragen, zu verändern und zu strukturieren (SELECT, INSERT, UPDATE, DELETE, CREATE TABLE usw.).
Genauer: SQL ist ein offener Standard, den fast alle relationalen Datenbanksysteme (MySQL, PostgreSQL, MariaDB, SQL Server) implementieren — mit kleinen, herstellerspezifischen Abweichungen im Detail (“SQL-Dialekte”). Grundprinzip: Daten liegen in Tabellen mit festen Spalten, Beziehungen zwischen Tabellen werden über Fremdschlüssel abgebildet.
Im Detail
SELECT kunden.name, SUM(bestellungen.betrag) AS gesamtumsatz
FROM kunden
JOIN bestellungen ON bestellungen.kunden_id = kunden.id
WHERE bestellungen.datum > '2026-01-01'
GROUP BY kunden.name
ORDER BY gesamtumsatz DESC;SQL gliedert sich in mehrere Teilsprachen mit eigenen Aufgaben: DDL (Data Definition Language, CREATE TABLE/ALTER TABLE — definiert die Struktur), DML (Data Manipulation Language, INSERT/UPDATE/DELETE/SELECT — verändert und liest Daten) und DCL (Data Control Language, GRANT/REVOKE — regelt Zugriffsrechte). Der JOIN im Beispiel zeigt SQLs relationales Grundprinzip: statt Kundendaten redundant in jeder Bestellung zu wiederholen, werden Tabellen über einen Fremdschlüssel (kunden_id) verknüpft und bei Bedarf zur Abfragezeit zusammengeführt.
Als deklarative Sprache beschreibt SQL WAS abgefragt werden soll, nicht WIE — die konkrete Ausführungsstrategie (welcher Index genutzt wird, in welcher Reihenfolge Tabellen verknüpft werden) übernimmt der “Query Planner” der Datenbank selbst, basierend auf Statistiken über die vorhandenen Daten. Diese Trennung erlaubt es Datenbanksystemen, Abfragen unabhängig vom geschriebenen SQL-Text zu optimieren.
Geschichte und Standardisierung
SQL wurde in den frühen 1970er-Jahren bei IBM entwickelt, basierend auf Edgar F. Codds theoretischem Modell relationaler Datenbanken (1970). Seit 1986 ist SQL ein offizieller ANSI/ISO-Standard, regelmäßig weiterentwickelt (SQL-92, SQL:1999, SQL:2003 mit XML-Unterstützung, bis zu aktuellen Versionen mit JSON-Funktionen). Trotz Standardisierung implementiert jedes Datenbanksystem den Standard nicht zu 100% identisch — PostgreSQL, MySQL und SQL Server unterscheiden sich in Detailfragen (z. B. String-Verkettung: || bei PostgreSQL, CONCAT() bei MySQL), weshalb “SQL-Kompatibilität” beim Datenbankwechsel selten komplett reibungslos ist.
SQL-Injection als klassisches Sicherheitsrisiko
Weil SQL-Abfragen historisch oft durch simples Zusammenfügen von Strings gebaut wurden, entstand SQL-Injection (siehe SQLi) als eine der bekanntesten Web-Sicherheitslücken: Wird Nutzereingabe ungeprüft direkt in eine SQL-Abfrage eingesetzt, kann ein Angreifer durch geschickt formulierte Eingabe die Abfragestruktur selbst manipulieren. Moderne Datenbankbibliotheken und ORMs verhindern das durch “Prepared Statements” (parametrisierte Abfragen), bei denen Nutzereingabe strikt als Datenwert behandelt wird und niemals als Teil der SQL-Syntax interpretiert werden kann.
Transaktionen und ACID
Ein zentrales SQL-Konzept sind Transaktionen — mehrere Datenbankoperationen werden als untrennbare Einheit behandelt (entweder alle erfolgreich oder keine), garantiert durch die ACID-Eigenschaften (Atomicity, Consistency, Isolation, Durability):
BEGIN;
UPDATE konten SET saldo = saldo - 100 WHERE id = 1;
UPDATE konten SET saldo = saldo + 100 WHERE id = 2;
COMMIT;Schlägt die zweite UPDATE-Anweisung fehl (z. B. wegen eines Systemabsturzes), macht die Datenbank auch die erste automatisch rückgängig (“Rollback”) — ohne Transaktionen könnte Geld bei einem Fehler “verschwinden”, weil nur die erste Buchung ausgeführt wurde.
Siehe auch: MariaDB, PostgreSQL, MySQL, SQLi