SQL-Formatierer

Füge eine minimierte SQL-Abfrage ein und erhalte lesbare, eingerückte Ausgabe. Wähle den Dialekt, die Einrückungsbreite und die Schlüsselwort-Großschreibung; alles läuft lokal in deinem Browser.

Mache eine Wand aus SQL wieder lesbar. Füge eine Abfrage ein – eine Zeile oder tausend – und sie wird während des Tippens neu formatiert. Wähle den Dialekt, damit dialektspezifische Syntax nicht verstümmelt wird, und wähle dann die Einrückung und Schlüsselwort-Großschreibung, die dein Team verwendet.

SQL formatieren, das andere lesen müssen

Warum der Dialekt-Selektor wichtig ist

SQL ist ein Standard in etwa so, wie Englische Rechtschreibung ein Standard ist. Jede Engine implementiert den gemeinsamen Kern und fügt dann Syntax hinzu, die sonst keiner hat, und ein Formatter, der nicht weiß, welche Engine du anvisierst, wird diese Syntax entweder falsch parsen oder stillschweigend unformatiert durchreichen.

Die Unterschiede sind nicht exotisch. Allein die Identifier-Quoting teilt das Feld: MySQL verwendet Backticks, PostgreSQL und Standard-SQL verwenden doppelte Anführungszeichen, und SQL Server verwendet eckige Klammern. Ein Formatter, der die falsche Konvention annimmt, kann einen gequoteten Identifier als Zeichenketten-Literal behandeln und die Abfrage um eine Grenze herum neu umbrechen, die gar nicht existiert. Neben dem Quoting gibt es LIMIT versus TOP versus FETCH FIRST, PostgresQLs ::-Cast-Operator, T-SQL-Variablen mit @-Präfix, BigQuerys Backtick-gewrapperte Projektpfade und Snowflakes QUALIFY-Klausel. Den richtigen Dialekt zu wählen, ist das, was diese intakt hält.

Einrückung ist eine Diff-Entscheidung

Die Einrückungsbreite und Schlüsselwort-Großschreibung wirken kosmetisch, aber sie bestimmen, wie deine Versionskontroll-Historie aussieht. Formatierung ist nur nützlich, wenn sie konsistent ist, denn sobald zwei Personen dieselbe Datei unterschiedlich formatieren, trägt jeder Commit eine Welle unzusammenhängender Whitespace-Änderungen mit sich, und Code-Review hört auf zu funktionieren. Wähle eine Konfiguration, schreibe sie in das Repository und wende sie mechanisch an.

Großgeschriebene Schlüsselwörter sind die häufigste Konvention, und sie helfen beim Lesen einer dichten Abfrage, weil sich die Strukturwörter visuell von deinen Tabellen- und Spaltennamen abheben. Kleinschreibung hat in Codebasen an Boden gewonnen, die SQL als gewöhnlichen Code behandeln und das Schreien nicht mögen. Beibehalten ist die richtige Wahl, wenn du die Abfrage von jemand anderem formatierst und das Layout ändern willst, ohne ein einziges Zeichen seines Texts anzufassen, was den resultierenden Diff rein strukturell macht.

Tabs versus Leerzeichen hat das übliche Argument anhängen, mit einer SQL-spezifischen Falte: Abfragen werden häufig in Terminals, Ticket-Systeme und Chat-Clients eingefügt, die einen Tab als acht Spalten rendern. Eine tief verschachtelte Abfrage, die mit Tabs eingerückt ist, kann genau an den Stellen unlesbar umbrechen, an denen du sie am ehesten teilst.

Was ein Formatter nicht tun wird

Formatierung ist rein präsentativ. Sie macht eine Abfrage nicht schneller, und sie ändert nichts am Plan, den der Optimierer erzeugt. Eine wunderschön eingerückte korrelierte Unterabfrage läuft weiterhin einmal pro Zeile. Verwende EXPLAIN für Performance-Arbeit; verwende einen Formatter für Lesbarkeit.

Sie validiert auch nicht. Dieses Werkzeug parst gerade gut genug, um den Text neu zu fließen, aber es ist nicht der Parser der Engine und es wird eine Abfrage mit falsch geschriebenem Spaltennamen oder fehlender Join-Bedingung fröhlich formatieren. Ein sauberes Format ist keine Syntaxprüfung, und die einzige Autorität darüber, ob eine Abfrage gültig ist, ist die Datenbank, auf der du sie ausführen willst.

Die eine Gewohnheit, die man neben dem Formatieren übernehmen sollte, ist Parameterisierung. Eine Abfrage zu formatieren, in deren String Werte eingefügt wurden, macht das Injektionsrisiko lesbarer, aber nicht weniger real. Wenn du feststellst, dass du SQL formatierst, das Nutzereingaben direkt in den Text eingespleißt enthält, ist das Formatieren nicht das Problem, das zuerst behoben werden sollte.

Open-Source-Hinweis: Die Formatierung wird von sql-formatter betrieben, veröffentlicht unter der MIT-Lizenz.

FAQ

Welche SQL-Dialekte werden unterstützt?
Vierzehn: Standard-SQL, MySQL, MariaDB, PostgreSQL, SQLite, SQL Server T-SQL, Oracle PL/SQL, IBM Db2, BigQuery, Snowflake, Redshift, Hive, Spark SQL und Trino. Die richtige Wahl bewahrt dialektspezifische Syntax wie Identifier-Quoting und Cast-Operatoren.
Ändert das Formatieren, was meine Abfrage tut?
Nein. Nur Whitespace, Zeilenumbrüche und Schlüsselwort-Großschreibung ändern sich, sodass die Anweisung semantisch identisch bleibt. Beachte, dass die Schlüsselwort-Großschreibung sicher ist, weil SQL-Schlüsselwörter groß-/kleinschreibungsunabhängig sind; deine Identifier und Zeichenketten-Literale werden nie umgeschrieben.
Lässt das meine Abfrage schneller laufen?
Nein. Formatierung ist präsentativ, und der Optimierer sieht dieselbe Anweisung, egal wie. Für Performance führe EXPLAIN oder EXPLAIN ANALYZE gegen deine tatsächliche Datenbank aus und schau dir den Plan an.
Wird mein SQL an einen Server gesendet?
Nein. sql-formatter läuft vollständig in deinem Browser, und es wird nichts übertragen. Das ist hier wichtig, weil echte Abfragen oft Tabellennamen, Schema-Details und manchmal Literalwerte aus der Produktion enthalten.
Warum lässt sich meine Abfrage nicht formatieren?
Meist unausgeglichene Anführungszeichen oder Klammern oder dialektspezifische Syntax, die unter dem falschen Dialekt geparst wird. Stelle den Dialekt-Selektor zuerst auf deine Datenbank um; wenn es weiterhin fehlschlägt, suche nach einem nicht geschlossenen Zeichenketten-Literal.
Sollte ich Tabs oder Leerzeichen verwenden?
Beides, solange das gesamte Team dieselbe verwendet. Leerzeichen werden überall identisch gerendert, was hilft, wenn Abfragen in Terminals, Tickets oder Chats eingefügt werden; Tabs lassen jeden Leser seine eigene Breite im Editor wählen.