SQL (Structured Query Language) ist die gemeinsame Sprache, die von fast jeder ernsthaften relationalen Datenbank auf dem Planeten gesprochen wird—von PostgreSQL, MySQL, und SQLite bis hin zu kommerziellen Systemen wie SQL Server und Oracle. Es ermöglicht Ihnen, Datenstrukturen zu definieren, Daten zu speichern, sie effizient abzufragen und Regeln darüber durchzusetzen, wie sich diese Daten verhalten.
Im Folgenden finden Sie eine tiefgreifende, etwa 2.500 Wörter umfassende Tour durch SQL: was es ist, wie es funktioniert und wie man es in echten Systemen gut einsetzt.
SQL ist eine deklarative Sprache: Sie beschreiben was für Daten Sie möchten, und die Datenbank entscheidet wie sie diese erhält. Tutorials wie der SQL-Leitfaden auf W3Schools und die W3Schools.in SQL-Serie stellen SQL als Standardsprache zum Speichern, Manipulieren und Abrufen von Daten über viele Datenbank-Engines hinweg vor.
Da SQL standardisiert und weitgehend unterstützt wird, können Sie dasselbe mentale Modell verwenden für:
Die meisten täglichen Geschäftsdaten—Bestellungen, Benutzer, Zahlungen, Logs, Analysen—werden letztendlich in Tabellen gespeichert, die Sie mit SQL abfragen können.
SQL wird durch die ISO/IEC 9075 Standardfamilie standardisiert, die die Kernsprache und viele optionale Erweiterungen definiert. Der Standard hat sich durch Versionen wie SQL-86, SQL-92, SQL:1999, SQL:2003 und bis zu SQL:2023 entwickelt. Artikel wie ANSIs Übersicht über den SQL-Standard ISO/IEC 9075:2023 erklären, wie sich die ANSI- und ISO-Standards im Laufe der Zeit angleichen.
Der Standard selbst ist in mehrere Teile aufgeteilt, wie z. B.:
Die vollständige Liste finden Sie auf der ISO-Katalogseite für SQL und in Ressourcen wie Modern SQLs Aufschlüsselung der Standardteile.
In der Praxis implementiert jede Datenbank ihren eigenen Dialekt:
Die Kernkonzepte—Tabellen, Zeilen, Spalten, Joins, Aggregate—sind portabel, aber jedes nicht-triviale System wird das Erlernen der Eigenheiten und Features eines bestimmten Dialekts beinhalten.
Im Kern ist SQL um das relationale Modell herum konzipiert: Daten leben in Tabellen (Relationen), wobei jede Zeile eine Tatsache darstellt und jede Spalte ein Attribut beschreibt.
Typische Elemente umfassen:
customers, ordersid, name, order_date, total_amountid)orders.customer_id → customers.id)Normalisierungsleitfäden—wie das DigitalOcean-Tutorial zur Normalisierung oder freeCodeCamps Erklärung zu 1NF, 2NF, 3NF—rahmen gutes relationales Design als Minimierung von Redundanz und Verhinderung von Update-Anomalien durch Aufteilen von Daten in gut strukturierte Tabellen und Verbinden mit Schlüsseln.
Wenn Sie mit SQL abfragen, fragen Sie im Wesentlichen die Datenbank: "Aus diesen Tabellen, unter diesen Bedingungen, welche Zeilen und Spalten soll ich sehen?"
Die SELECT-Anweisung ist das Arbeitspferd von SQL und wohl sein komplexester Befehl. Die SQLite SELECT-Referenz nennt es "den kompliziertesten Befehl in der SQL-Sprache", und sowohl MySQLs SELECT-Dokumentation als auch Tutorials wie SQLite Tutorials SELECT-Leitfaden gehen durch seine vielen Optionen.
SELECT id, name
FROM customers;Wichtige Teile:
SELECT listet die Spalten auf (oder * für alle Spalten, obwohl es normalerweise besser ist, explizit zu sein).FROM wählt eine oder mehrere Tabellen aus.WHERE filtert Zeilen.ORDER BY sortiert Ergebnisse.LIMIT schränkt ein, wie viele Zeilen Sie sehen.SELECT id, name, created_at
FROM customers
WHERE active = TRUE
ORDER BY created_at DESC
LIMIT 50;Einführungstutorials wie das W3Schools SQL-Tutorial und die W3Schools MySQL-Übersicht über häufige Befehle verwenden SELECT, um zu zeigen, wie Sie Daten aus Tabellen in einem einzigen, lesbaren Ausdruck extrahieren.
SQL glänzt, wenn Sie Filtern und Ausdrücke direkt in der Abfrage kombinieren:
SELECT
id,
total_amount,
total_amount * 0.1 AS tax_estimate
FROM orders
WHERE status = 'paid'
AND total_amount >= 100
ORDER BY total_amount DESC;Die WHERE-Klausel kann Vergleichsoperatoren (=, <>, >, <), logische Operatoren (AND, OR, NOT), Mustervergleiche (LIKE, ILIKE) und mehr verwenden. Datenbanken wie MySQL dokumentieren eine reichhaltige Menge von eingebauten Funktionen und Operatoren für numerische, String-, Datums-/Zeit-, JSON- und andere Operationen.
Sie können auch:
IN verwenden, um gegen eine Liste abzugleichen: WHERE status IN ('paid', 'refunded')BETWEEN für Bereiche verwenden: WHERE created_at BETWEEN '2025-01-01' AND '2025-01-31'IS NULL / IS NOT NULL verwenden, um fehlende Werte zu behandelnGute Tutorials und Handbücher betonen, dass Ausdrücke in vielen Klauseln erscheinen—WHERE, ORDER BY, HAVING und sogar SELECT selbst. Die MySQL-Dokumentation hebt dies in ihrem Abschnitt zur Ausdrucksauswertung im Kapitel über Funktionen und Operatoren hervor.
Echte Datenbanken halten selten alles in einer einzigen Tabelle. Stattdessen normalisieren Sie Daten in mehrere Tabellen und verbinden sie, wenn Sie abfragen. Joins werden ausführlich in Ressourcen wie der W3Schools-Seite zu SQL-Joins, GeeksforGeeks Join-Tutorial, TutorialsPoints Join-Übersichtund interaktiven Leitfäden wie dem SQL-Joins-Tutorial auf SQL Practice Online behandelt.
SELECT
o.id,
c.name,
o.order_date,
o.total_amount
FROM orders AS o
JOIN customers AS c
ON c.id = o.customer_id;Häufige Join-Typen:
Visuelle und code-lastige Erklärungen wie DbSchemas Artikel "SQL joins explained" oder LearnSQL.coms Join-Beispiele sind großartige Möglichkeiten, um ein starkes Verständnis dafür aufzubauen, wie Joins sich verhalten.
Um Daten zusammenzufassen—Summen, Durchschnitte, Zählungen—verwenden Sie Aggregatfunktionen (COUNT, SUM, AVG, MIN, MAX) mit GROUP BY:
SELECT
customer_id,
COUNT(*) AS order_count,
SUM(total_amount) AS total_spent
FROM orders
WHERE status = 'paid'
GROUP BY customer_id
HAVING SUM(total_amount) >= 1000
ORDER BY total_spent DESC;Referenzen wie das MySQL-Kapitel zu Funktionen und Operatoren und die PostgreSQL-Dokumentation zu Aggregat- und Fensterfunktionen katalogisieren die eingebauten Funktionen, die Sie in diesen Ausdrücken verwenden können.
Modernes SQL unterstützt auch Fensterfunktionen, die es Ihnen ermöglichen, Aggregate über gleitende "Fenster" von Zeilen zu berechnen, während Sie weiterhin einzelne Zeilen zurückgeben—z. B. laufende Summen oder Rangfolgen. Fensterfunktionen traten über Änderungen an SQL:1999 in SQL ein, später in SQL:2003 integriert, wie in Notizen zu den SQL:1999- und SQL:2003-Standards zusammengefasst.
SELECT
customer_id,
order_date,
total_amount,
SUM(total_amount) OVER (
PARTITION BY customer_id
ORDER BY order_date
) AS running_total
FROM orders;Diese Art von Abfrage ist extrem mächtig für Analysen direkt in der Datenbank.
SQL ist nicht nur zum Abfragen; es definiert auch die Form Ihrer Daten durch Data Definition Language (DDL)-Anweisungen, gut dokumentiert in Abschnitten wie PostgreSQLs Datendefinitions-Leitfaden und MySQLs SQL-Anweisungen-Kapitel.
Häufige DDL-Befehle:
CREATE DATABASE my_app; – eine Datenbank erstellenCREATE TABLE customers (...); – eine Tabelle definierenALTER TABLE customers ADD COLUMN phone TEXT; – Tabellenstruktur ändernDROP TABLE customers; – eine Tabelle entfernenCREATE TABLE customers (
id SERIAL PRIMARY KEY,
email VARCHAR(255) UNIQUE NOT NULL,
name TEXT NOT NULL,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
active BOOLEAN NOT NULL DEFAULT TRUE
);Wichtige Punkte:
PRIMARY KEY, UNIQUE, NOT NULL, CHECK-AusdrückeJedes größere RDBMS-Handbuch—PostgreSQLs SQL-Sprachabschnitt, MySQLs Referenzhandbuchund SQLites Sprachreferenz—betont, sorgfältig über DDL nachzudenken, da Schema-Entscheidungen später schwer zu ändern sind.
SQL-Datenbanken implementieren normalerweise die ACID-Eigenschaften—Atomarität, Konsistenz, Isolation, Dauerhaftigkeit—über Transaktionen:
BEGIN;
UPDATE accounts
SET balance = balance - 200
WHERE id = 1;
UPDATE accounts
SET balance = balance + 200
WHERE id = 2;
COMMIT;Wenn zwischen BEGIN und COMMIT etwas fehlschlägt, kann die Transaktion zurückgerollt werden, damit Zwischenänderungen nicht in die Datenbank gelangen.
MySQLs Abschnitt zu transaktionalen und Sperr-Anweisungen behandelt START TRANSACTION, COMMIT, ROLLBACK und Savepoints, während PostgreSQLs Kapitel zu Nebenläufigkeitskontrolle und Transaktionsverwaltung erklären, wie Isolationsstufen und MVCC unter der Haube funktionieren.
Einschränkungen—wie Fremdschlüssel oder Check-Einschränkungen—sind die Art der Datenbank, Geschäftsregeln durchzusetzen:
ALTER TABLE orders
ADD CONSTRAINT fk_orders_customer
FOREIGN KEY (customer_id)
REFERENCES customers (id);Gut verwendet, verwandeln sie Ihre Datenbank in einen Wächter von Invarianten, der ungültige Daten an der Quelle verhindert, anstatt sich nur auf Anwendungslogik zu verlassen.
Das Schema richtig zu machen, ist oft wichtiger als clevere Abfragen. Normalisierung ist der Prozess der Strukturierung von Tabellen, um Redundanz zu reduzieren und Konsistenz zu verbessern. Tutorials wie:
Typische Progression:
Über-Normalisierung kann die Leistung beeinträchtigen und Abfragen verkomplizieren; pragmatische Teams normalisieren oft auf 3NF und denormalisieren dann selektiv (z. B. Caching von Aggregaten), wo die Leistung es erfordert.
Indizes sind das primäre Werkzeug, um SQL-Abfragen schnell zu machen. Sie sind Hilfsdatenstrukturen, die es der Datenbank ermöglichen, direkt zu relevanten Zeilen zu springen, anstatt ganze Tabellen zu scannen.
Eine hoch angesehene Ressource zur Indizierung ist Markus Winands Use The Index, Luke!, ein kostenloses Online-Buch, das sich vollständig auf SQL-Leistung und Indizierungsstrategie konzentriert. Die Hauptseite der Website, UseTheIndexLuke.com, und Artikel wie "Indexing LIKE filters" und "More indexes, slower INSERT" erklären, wann Indizes helfen und wann sie schaden.
Wichtige Ideen:
WHERE email = ..., WHERE created_at >= ...).(customer_id, created_at) gut für WHERE customer_id = ? AND created_at >= ?.SELECT, UPDATE und DELETE mit Filtern, aber verlangsamen Einfügungen, weil jede Einfügung alle relevanten Indizes aktualisieren muss.Leitfäden wie MSSQLTips Artikel zum Entwerfen von SQL Server-Indizes demonstrieren, wie Spaltenauswahl und -reihenfolge in einem Index echte Abfragen beeinflussen.
Praktische Faustregeln:
EXPLAIN ANALYZE der Datenbank, um zu sehen, wie Abfragen ausgeführt werden.Während die Grundlagen stabil geblieben sind, hat sich modernes SQL erheblich weiterentwickelt:
WITH ermöglichen lesbarere, modulare Abfragen:WITH recent_orders AS (
SELECT *
FROM orders
WHERE order_date >= CURRENT_DATE - INTERVAL '7 days'
)
SELECT customer_id, COUNT(*)
FROM recent_orders
GROUP BY customer_id;Der SQL-Standard selbst hat Teile für XML, mehrdimensionale Arrays und Property-Graph-Abfragen hinzugefügt, wie in der ISO SQL-Standardkatalog und in Artikeln über SQLs Evolution wie dem ANSI SQL-Standard-Artikel dokumentiert.
Modernes SQL ist mächtig genug, dass viele Anwendungen komplexe Logik—Hierarchien, Analysen, Ereignisverarbeitung—in die Datenbankschicht verschieben können.
Da SQL grundlegend für Datenarbeit bleibt, gibt es ein reiches Ökosystem von Lernressourcen:
Eine praktische Lernstrategie:
WHERE, ORDER BY und LIMIT hinzu.GROUP BY zu beantworten.EXPLAIN.Wenn Sie SQL bequem lesen und schreiben können, können Sie Daten direkt in der Produktion inspizieren, Berichte erstellen, ohne in Tabellenkalkulationen zu exportieren, Anwendungslogik debuggen, indem Sie in die zugrunde liegenden Tabellen schauen, und effektiver mit Ingenieuren und Analysten zusammenarbeiten.
SQL befindet sich an einer einzigartigen Schnittstelle: Es ist über 40 Jahre alt, aber heute in cloud-nativen, analytiklastigen Systemen tiefgreifend relevant. Der ISO/IEC 9075-Standard und seine vielen Teile entwickeln sich weiter, während Open-Source-Datenbanken wie PostgreSQL, MySQL, und SQLite praktische Features und Leistungsverbesserungen vorantreiben.
Wenn Sie mit Daten arbeiten—Entwickler, Analyst, Datenwissenschaftler oder Produktmanager—ist SQL die gemeinsame Sprache, die es Ihnen ermöglicht, der Datenbank direkt Fragen zu stellen. Es lohnt sich, es einmal zu lernen, und es zahlt sich für den Rest Ihrer Karriere aus.
SQL-Formatierung ist der Prozess der Organisation von SQL-Abfragen mit ordnungsgemäßer Einrückung, Zeilenumbrüchen und Schlüsselwort-Groß-/Kleinschreibung, um die Lesbarkeit und Wartbarkeit zu verbessern.
Unser Formatierer unterstützt mehrere SQL-Dialekte, einschließlich MySQL, PostgreSQL, SQL Server, SQLite, Oracle und viele andere.
Ja! Die gesamte SQL-Formatierung erfolgt vollständig in Ihrem Browser. Ihre Abfragen verlassen niemals Ihren Computer und gewährleisten vollständige Privatsphäre und Sicherheit.
Ja, Sie können mehrere SQL-Anweisungen gleichzeitig formatieren. Der Formatierer behandelt jede Anweisung entsprechend dem ausgewählten Dialekt angemessen.
Der Formatierer versucht, Ihr SQL zu formatieren, auch wenn es Syntaxfehler enthält. Möglicherweise sehen Sie jedoch Fehlermeldungen für ungültiges SQL, das nicht geparst werden kann. Validieren Sie Ihr SQL immer mit Ihrem Datenbanksystem.