SQL Formatter
SQL Formatter
Formatiere SQL-Queries mit professioneller Einrückung, Syntax-Highlighting und konfigurierbarer Keyword-Groß-/Kleinschreibung. Mit Minifizierung und Live-Vorschau.
Datenschutz-Garantie: Alle SQL-Queries werden zu 100% lokal in deinem Browser formatiert. Es werden keine Daten an Server gesendet. Perfekt für produktive Queries mit sensiblen Daten.
Inhaltsverzeichnis
Schnellübersicht
- SQL Formatter: Queries formatieren mit Live-Vorschau
- Syntax-Highlighting: Keywords, Strings, Comments, Functions
- Minifizierung: Queries komprimieren auf eine Zeile
- Konfigurierbar: Einrückung, Keyword-Case, Dialekt
- Beispiele: SELECT, JOIN, INSERT, UPDATE, CTE
- Theorie: SQL-Grundlagen und Best Practices
- Geschichte: Von SEQUEL zu modernem SQL
- FAQ: Häufige Fragen zu SQL
1. SQL Formatter
Gib eine SQL-Query ein und erhalte sofort die formatierte Ausgabe mit Live-Vorschau.
- SELECT: Mit FROM, WHERE, GROUP BY, HAVING, ORDER BY, LIMIT
- INSERT: Mit VALUES, SELECT-INSERT
- UPDATE: Mit SET und WHERE
- DELETE: Mit WHERE-Bedingungen
- JOINS: INNER, LEFT, RIGHT, FULL, CROSS
- Subqueries: In WHERE, FROM und SELECT
- CTEs: WITH ... AS (...)
- Funktionen: COUNT, SUM, AVG, MAX, MIN, COALESCE etc.
2. SQL-Grundlagen verstehen
SQL (Structured Query Language) ist die Standardsprache für relationale Datenbanken.
SELECT – Daten lesen
Der häufigste Befehl: Daten aus Tabellen abfragen.
- SELECT: Welche Spalten?
- FROM: Aus welcher Tabelle?
- WHERE: Welche Bedingung?
- GROUP BY: Gruppierung
- ORDER BY: Sortierung
- LIMIT: Anzahl Zeilen
JOINs – Tabellen verbinden
Verknüpft Daten aus mehreren Tabellen über gemeinsame Spalten.
- INNER JOIN: Nur Übereinstimmungen
- LEFT JOIN: Alle links + Übereinstimmungen
- RIGHT JOIN: Alle rechts + Übereinstimmungen
- FULL JOIN: Alle aus beiden
- CROSS JOIN: Kartesisches Produkt
INSERT / UPDATE / DELETE
Datenmanipulation (DML) – die "schreibenden" Befehle.
- INSERT: Neue Zeilen einfügen
- UPDATE: Bestehende Zeilen ändern
- DELETE: Zeilen löschen
- ⚠ Warnung: UPDATE/DELETE ohne WHERE ändern/löschen alle Zeilen!
Best Practices
So schreibst du gutes SQL:
- Keywords GROSS: Lesbarkeit
- Ein Query pro Zeile: Nicht alles in eine Zeile
- Aliase kurz: u, o, p statt users, orders
- Indizes nutzen: WHERE-Spalten indexieren
- EXPLAIN: Query-Plan analysieren
- Kein SELECT *: Nur benötigte Spalten
- Parameter: Prepared Statements gegen SQL-Injection
- Problem: Ungeprüfte Benutzereingaben in SQL-Strings führen zu Code-Ausführung
- Beispiel:
SELECT * FROM users WHERE name = '<input>' - Angriff:
' OR '1'='1→ gibt alle Zeilen zurück! - Schlimmer:
'; DROP TABLE users; --→ löscht die Tabelle! - Schutz: Prepared Statements mit Parametern verwenden
- Nie: Benutzereingaben direkt in SQL-String concatenieren
Goldene Regel: Immer Prepared Statements mit ? oder :param verwenden!
3. SQL-Dialekte im Vergleich
SQL ist standardisiert, aber jede Datenbank hat eigene Erweiterungen.
| Feature | MySQL | PostgreSQL | SQLite | SQL Server |
|---|---|---|---|---|
| LIMIT | LIMIT n | LIMIT n | LIMIT n | TOP n / OFFSET FETCH |
| Auto-Increment | AUTO_INCREMENT | SERIAL / IDENTITY | AUTOINCREMENT | IDENTITY |
| String-Concat | CONCAT() oder || | || oder CONCAT() | || | + oder CONCAT() |
| Boolean | TINYINT(1) | BOOLEAN | INTEGER | BIT |
| Datum | NOW() | NOW() | datetime('now') | GETDATE() |
| Limit + Offset | LIMIT n OFFSET m | LIMIT n OFFSET m | LIMIT n OFFSET m | OFFSET m ROWS FETCH NEXT n |
| Regex | REGEXP | ~ / SIMILAR TO | REGEXP (Erweiterung) | LIKE (eingeschränkt) |
| JSON | JSON | JSONB | JSON1 (Erweiterung) | JSON (2016+) |
- SQL (relational): Strukturierte Daten, Beziehungen, ACID-Transaktionen
- NoSQL (MongoDB, Redis): Flexible Schemas, horizontale Skalierung, Big Data
- SQL für: Finanzen, ERP, CRM, Buchhaltung, alles mit strikter Konsistenz
- NoSQL für: Logs, Echtzeit-Analytics, Content-Management, IoT
- NewSQL (CockroachDB, TiDB): Beste aus beiden Welten
4. Geschichte von SQL
Von SEQUEL bei IBM zum universellen Datenbank-Standard.
Codd's relationales Modell
Edgar F. Codd veröffentlicht bei IBM sein Paper über das relationale Datenmodell. Die Grundlage für alle modernen Datenbanken ist gelegt.
SEQUEL wird erfunden
Donald Chamberlin und Raymond Boyce entwickeln bei IBM SEQUEL (Structured English Query Language) für das System R Projekt.
Oracle und SQL
Relational Software Inc. (später Oracle) veröffentlicht die erste kommerzielle SQL-Datenbank. SQL wird zum De-facto-Standard für relationale Datenbanken.
ANSI SQL-86
ANSI veröffentlicht den ersten SQL-Standard SQL-86. 1987 folgt ISO SQL. Damit wird SQL erstmals formal standardisiert.
SQL-92
SQL-92 wird der wichtigste Standard mit vielen neuen Features: JOINs, CASE, Constraints, DDL/DML-Trennung. Bis heute die Grundlage.
SQL:2003 mit XML
SQL:2003 führt XML-Unterstützung, Window Functions und Sequences ein. SQL wird mächtiger und flexibler.
SQL ist überall
SQL ist die universelle Sprache für Daten. Über 50 Jahre nach seiner Erfindung ist es der Standard für relationale Datenbanken. PostgreSQL, MySQL, SQL Server, Oracle und SQLite dominieren den Markt. Moderne Trends wie NewSQL, Cloud-Datenbanken und Serverless SQL bauen auf SQL auf.
5. FAQ – Häufige Fragen
Häufige Fragen zu SQL
SQL steht für Structured Query Language – eine standardisierte Sprache für relationale Datenbanken.
Ursprünglich hieß es SEQUEL (Structured English Query Language), wurde aber wegen eines Markenstreits in SQL umbenannt.
Aussprache: Meist "S-Q-L" (Buchstaben) oder "Sequel" (Wort).
Einsatzgebiete:
- Daten abfragen (SELECT)
- Daten einfügen (INSERT)
- Daten ändern (UPDATE)
- Daten löschen (DELETE)
- Datenbanken definieren (CREATE, ALTER, DROP)
Beide filtern Daten, aber zu unterschiedlichen Zeitpunkten:
- WHERE: Filtert vor der Gruppierung (auf Rohdaten)
- HAVING: Filtert nach der Gruppierung (auf Aggregaten)
Beispiel:
SELECT kategorie, COUNT(*) AS anzahl FROM produkte WHERE preis > 10 -- Filtert vor GROUP BY GROUP BY kategorie HAVING COUNT(*) > 5; -- Filtert nach GROUP BY
Merksatz: WHERE = vor GROUP BY, HAVING = nach GROUP BY.
Die JOINs unterscheiden sich darin, was passiert, wenn keine Übereinstimmung gefunden wird:
- INNER JOIN: Zeigt nur Zeilen, die in beiden Tabellen eine Übereinstimmung haben
- LEFT JOIN: Zeigt alle Zeilen aus der linken Tabelle, auch ohne Übereinstimmung (rechte Spalten = NULL)
- RIGHT JOIN: Umgekehrt – alle aus der rechten Tabelle
- FULL OUTER JOIN: Alle Zeilen aus beiden Tabellen
Beispiel:
-- INNER: nur Benutzer MIT Bestellungen SELECT u.name, o.total FROM users u INNER JOIN orders o ON u.id = o.user_id; -- LEFT: ALLE Benutzer, auch ohne Bestellung SELECT u.name, o.total FROM users u LEFT JOIN orders o ON u.id = o.user_id;
SQL-Injection ist eine der gefährlichsten Sicherheitslücken: Angreifer schleusen eigenen SQL-Code über Benutzereingaben ein.
Beispiel (verwundbar):
query = "SELECT * FROM users WHERE name = '" + input + "'" // Angreifer gibt ein: ' OR '1'='1 // Resultat: SELECT * FROM users WHERE name = '' OR '1'='1' // → Gibt ALLE Benutzer zurück!
Schutz: Prepared Statements
// Sicher – Parameter werden getrennt übergeben query = "SELECT * FROM users WHERE name = ?" stmt = db.prepare(query) stmt.execute([input])
Weitere Schutzmaßnahmen:
- ORM verwenden: Hibernate, SQLAlchemy, Sequelize
- Least Privilege: DB-User mit minimalen Rechten
- Validierung: Eingaben prüfen und filtern
- WAF: Web Application Firewall
Indizes beschleunigen Lesezugriffe, verlangsamen aber Schreibvorgänge.
Index anlegen für:
- WHERE-Spalten: Häufig gefilterte Spalten
- JOIN-Spalten: Foreign Keys
- ORDER BY-Spalten: Sortierte Abfragen
- GROUP BY-Spalten: Aggregationen
- UNIQUE-Spalten: E-Mail, Username
Kein Index für:
- Kleine Tabellen: < 1000 Zeilen
- Häufige Schreibvorgänge: Jeder INSERT/UPDATE kostet
- Niedrige Kardinalität: z.B. Geschlecht (nur 2 Werte)
- BLOB/TEXT-Spalten: Sehr groß
Tipp: EXPLAIN oder EXPLAIN ANALYZE verwenden, um Query-Pläne zu prüfen!
CTE (Common Table Expression) ist eine temporäre benannte Ergebnismenge, die nur für eine Query gilt.
Syntax:
WITH top_users AS ( SELECT user_id, SUM(total) AS total_spent FROM orders GROUP BY user_id HAVING SUM(total) > 1000 ) SELECT u.name, t.total_spent FROM users u JOIN top_users t ON u.id = t.user_id;
Vorteile:
- Lesbarkeit: Komplexe Queries aufteilen
- Wiederverwendung: Mehrfach referenzieren
- Rekursion:
WITH RECURSIVEfür Bäume/Graphs - Alternative zu Subqueries: Oft performanter
SELECT * ist verlockend, aber hat Nachteile:
- Performance: Unnötige Daten werden gelesen und übertragen
- Netzwerk: Besonders bei großen BLOB/TEXT-Spalten
- Index-Nutzung: Covering Index wird verhindert
- Wartbarkeit: Schema-Änderungen brechen Code
- Klarheit: Nicht ersichtlich, welche Daten benötigt werden
- Sicherheit: Neue sensible Spalten werden automatisch mitgelesen
Besser:
-- ✗ Schlecht SELECT * FROM users WHERE id = 1; -- ✓ Gut SELECT id, name, email FROM users WHERE id = 1;
Ausnahme: Bei explorativen Analysen oder kleinen Tabellen ist SELECT * akzeptabel.
Beide kombinieren Ergebnisse aus zwei Queries, aber mit Unterschied:
- UNION: Entfernt Duplikate (langsamer, sortiert)
- UNION ALL: Behält alle Zeilen (schneller, keine Sortierung)
Beispiel:
SELECT name FROM customers UNION SELECT name FROM suppliers; -- Duplikate entfernt SELECT name FROM customers UNION ALL SELECT name FROM suppliers; -- Duplikate bleiben
Regeln:
- Gleiche Anzahl Spalten
- Kompatible Datentypen
- Gleiche Reihenfolge
Tipp: Wenn Duplikate egal sind, immer UNION ALL verwenden – deutlich schneller!
Transaktionen gruppieren mehrere SQL-Befehle zu einer atomaren Einheit – entweder alles oder nichts.
ACID-Eigenschaften:
- Atomicity: Ganz oder gar nicht
- Consistency: Datenbank bleibt konsistent
- Isolation: Transaktionen stören sich nicht
- Durability: Nach COMMIT dauerhaft gespeichert
Beispiel Überweisung:
BEGIN TRANSACTION; UPDATE konten SET saldo = saldo - 100 WHERE id = 1; UPDATE konten SET saldo = saldo + 100 WHERE id = 2; -- Bei Erfolg: COMMIT; -- Bei Fehler: ROLLBACK;
Ohne Transaktion: Bei Fehler zwischen den UPDATEs wäre Geld verschwunden!
Die Wahl hängt von den Anforderungen ab:
- MySQL / MariaDB: Web-Anwendungen, WordPress, CMS – einfach und weit verbreitet
- PostgreSQL: Komplexe Queries, GIS, JSONB, Window Functions – die "Beste" für viele
- SQLite: Embedded, Mobile Apps, kleine Tools – keine Installation nötig
- Microsoft SQL Server: Windows/.NET-Umgebungen, Enterprise, BI
- Oracle: Große Unternehmen, Banken – teuer, aber mächtig
- CockroachDB / TiDB: NewSQL – verteilt, ACID, horizontale Skalierung
- Cloud: AWS RDS, Azure SQL, Google Cloud SQL – Managed Services
Faustregeln:
- Anfänger / Web: MySQL oder PostgreSQL
- Embedded: SQLite
- Enterprise: PostgreSQL oder SQL Server
- Skalierung: PostgreSQL oder NewSQL
Zusammenfassung
Die wichtigsten Punkte
- SQL = Structured Query Language, seit 1974
- ANSI SQL-86 und SQL-92 sind die wichtigsten Standards
- SELECT, INSERT, UPDATE, DELETE sind die Basis-Befehle
- JOINs verbinden Tabellen: INNER, LEFT, RIGHT, FULL
- WHERE filtert vor, HAVING nach GROUP BY
- UNION ALL ist schneller als UNION
- CTEs (WITH) machen komplexe Queries lesbar
- SQL-Injection: Immer Prepared Statements verwenden
- Indizes: Auf WHERE-, JOIN-, ORDER BY-Spalten anlegen
- Kein SELECT *: Nur benötigte Spalten auswählen
- Transaktionen: BEGIN, COMMIT, ROLLBACK für Atomarität
- Unser Tool: Lokale Formatierung mit Syntax-Highlighting
Weitere Tools
Formatiere, validiere und minifiziere JSON mit Syntax-Highlighting.
Zum ToolKonvertiere JSON-Arrays in CSV-Tabellen für Excel.
Zum ToolKonvertiere YAML in JSON und umgekehrt mit Live-Vorschau.
Zum ToolFormatiere und validiere XML-Dokumente mit Syntax-Highlighting.
Zum Tool