HandyTools Hub
← Zurück zu den Tools

SQL-Formatierer

Verschönern und minimieren Sie SQL-Abfragen mit anpassbaren Schlüsselwort-Schreibweisen und Einzugsoptionen.

Formatierte SQL wird hier angezeigt...

SQL, das in einer einzigen Zeile ankommt, ist schwer zu prüfen, und eine WHERE-Klausel, die ganz am Ende vergraben ist, wird leicht übersehen. Dieser Formatierer nimmt eine eingefügte Abfrage und legt die Hauptklauseln auf separate, eingerückte Zeilen — mit wählbarer Groß-/Kleinschreibung der Schlüsselwörter und Zwei- oder Vier-Leerzeichen-Einrückung. Er hat außerdem einen Minimieren-Modus für die entgegengesetzte Aufgabe: SQL auf eine einzige kompakte Zeile zusammenzupressen, etwa für Logs, URLs oder Konfigurationsdateien.

Verwendung

  1. Die Abfrage in den Eingabebereich einfügen oder tippen. Das Tool formatiert während der Eingabe, und die Ausgabe aktualisiert sich live.
  2. Auf Formatieren klicken, um die Abfrage auszulegen, oder auf Minimieren, um sie zusammenzuziehen.
  3. Im ersten Dropdown eine Schlüsselwort-Schreibweise wählen — Großbuchstaben, Kleinbuchstaben oder Kapitalisieren.
  4. Im zweiten Dropdown eine Einrückungsbreite von zwei oder vier Leerzeichen wählen.
  5. Die Zeichenzahlen unter den Bereichen lesen, um zu sehen, wie viel die Umwandlung hinzugefügt oder entfernt hat, und dann auf Kopieren klicken.

Im Editor führt Ctrl+Enter (oder Cmd+Enter) Formatieren erneut aus.

Was sich Token für Token ändert

Der Formatierer arbeitet auf Tokens, nicht auf einem geparsten Syntaxbaum. Zuerst hebt er String-Literale und Kommentare aus dem Weg, dann normalisiert er die Abstände um Kommas und Klammern — ein Komma wird zu Komma plus Leerzeichen, vor eine öffnende Klammer wird ein Leerzeichen erzwungen, und Leerzeichen innerhalb von Klammern werden entfernt. Das Ergebnis wird an Leerzeichen aufgeteilt.

Dann läuft er die Token-Liste durch. Wenn er ein Token sieht, dessen Großbuchstabenform eine Hauptklausel ist und die aktuelle Zeile nicht bereits leer ist, gibt er einen Zeilenumbruch aus und beginnt die nächste Zeile mit der konfigurierten Einrückung. Erkannte Schlüsselwörter werden gemäß Ihrer Einstellung umgeschrieben, alles andere wird unverändert übernommen.

Der praktische Effekt ist ein flaches Layout mit einer Klausel pro Zeile. Eine Abfrage mit vier Klauseln wird zu vier eingerückten Zeilen, wobei jede AND- und OR-Bedingung in einer eigenen Zeile auf derselben Ebene steht.

Praxisbeispiel: Eine einzeilige Abfrage

Eingabe wie getippt:

select id, name from users where status = 'active' and age > 18 order by name asc

Ausgabe von Formatieren mit Schlüsselwörtern in Großbuchstaben und Zwei-Leerzeichen-Einrückung:

SELECT id, name
FROM users
WHERE status = 'active'
AND age > 18
ORDER BY name ASC

Beachten Sie, dass das String-Literal 'active' unangetastet bleibt, die Spaltenliste in der SELECT-Zeile bleibt und ASC umgeschrieben wird, weil es in der Schlüsselwortliste steht. Dieselbe Eingabe wird durch Minimieren zu:

select id, name from users where status = 'active' and age > 18 order by name asc

Minimieren schreibt Schlüsselwörter nicht um, die Kleinschreibung bleibt also erhalten.

Betrachten Sie nun eine Abfrage mit einer Unterabfrage:

select name from users where id in (select user_id from orders where total > 100)

Formatieren erzeugt:

SELECT name
FROM users
WHERE id IN (select user_id
FROM orders
WHERE total > 100)

Zwei Dinge sind bemerkenswert. Das innere select wird nicht zu SELECT umgeschrieben — und beginnt keine eigene Zeile —, weil die öffnende Klammer am Schlüsselwort klebt und das entstehende Token (select weder zur Klauselliste noch zur Schlüsselwortliste passt. Sobald das innere FROM und WHERE als eigenständige Tokens erscheinen, werden sie erkannt und beginnen neue Zeilen, und die schließende Klammer bleibt am abschließenden 100 hängen. Das ist funktional korrekt und weit lesbarer als eine lange Zeile, aber es ist nicht die treppenförmige Einrückung, die ein Mensch von Hand schreiben würde. Das ist das flache, tokenbasierte Modell in Aktion.

Formatieren versus Minimieren

VerhaltenFormatierenMinimieren
Zeilenumbrüche an KlauselnJaNein
Umschreiben von SchlüsselwörternJaNein
Entfernt KommentareNeinJa
Zieht Leerraum zusammenTeilweiseVollständig
Am besten fürCode-Review, Doku, DebuggingLogs, URLs, eingebettete Strings

Ein typischer Einsatz ist: vor dem Review formatieren und vor dem Einbetten minimieren. Weil Minimieren Kommentare entfernt, sollten Sie es niemals auf eine Abfrage anwenden, deren Kommentare später benötigte Informationen tragen.

Wie Strings und Kommentare geschützt werden

Das ist das Merkmal, das das Tool sicher nutzbar macht. Vor jedem Tokenisieren wird jeder einfach angeführte String durch einen Platzhalter wie __STR0__ ersetzt, Blockkommentare durch __BC0__ und Zeilenkommentare durch __LC0__. Die Platzhalter sind inerte Wörter, die nicht für Schlüsselwörter gehalten werden können, sodass ein Literal wie 'Drop it' nie umgeschrieben oder umgebrochen wird. Nach dem Formatieren werden die Originale der Reihenfolge nach wiederhergestellt.

Minimieren entfernt die Kommentar-Platzhalter vollständig und stellt die Strings wieder her. Eine Einschränkung: Der Schutz erfasst jeden Lauf zwischen zwei einfachen Anführungszeichen, sodass Dialekte mit ungewöhnlichen Escape-Formen — verdoppelte Anführungszeichen innerhalb eines Literals oder Backslash-Escapes — die Grenze verwirren können; solche Fälle lohnen einen kurzen Blick.

Grenzen eines tokenbasierten Formatierers

  • Schlüsselwort-Erkennung ist textuell. Eine Spalte namens count oder ein Tabellenalias, der mit einem Schlüsselwort kollidiert, wird umgeschrieben, und ein Bezeichner namens order oder set kann auf eine neue Zeile geschoben werden. Solche Bezeichner zu quoten vermeidet die Verwechslung meist.
  • Keine Verschachtelungstiefe. Unterabfragen und geklammerte Ausdrücke liegen alle auf einer Einrückungsebene.
  • Keine Syntaxvalidierung. Fehlerhaftes SQL wird genauso treu formatiert wie gültiges; das Tool sagt Ihnen nicht, dass die Abfrage falsch ist.
  • Keine dialektspezifischen Regeln. Es verarbeitet gängige MySQL-, PostgreSQL- und SQLite-Syntax, kennt aber keine dialektspezifischen Schlüsselwörter wie RETURNING oder LATERAL.
  • Kommentare werden nicht umgebrochen. Im Formatieren-Modus bleibt ein langer Inline-Kommentar dort hängen, wo er zufällig stand.

Verwandte Tools

Häufig gestellte Fragen

Welche Schlüsselwörter lösen in der formatierten Ausgabe eine neue Zeile aus?

Eine feste Menge von Hauptklauseln tut das: SELECT, FROM, WHERE, INSERT, INTO, VALUES, UPDATE, SET, DELETE, CREATE, ALTER, DROP, ORDER, GROUP, HAVING, LIMIT, UNION, JOIN, LEFT, RIGHT, INNER, OUTER, CROSS, FULL, ON, AND, OR, BEGIN, COMMIT und ROLLBACK. Jedes davon beginnt auf einer eigenen Zeile auf einer einzigen Einrückungsebene.

Was ist der Unterschied zwischen den Optionen Uppercase, Lowercase und Capitalize?

Uppercase gibt Schlüsselwörter als SELECT aus, lowercase als select und capitalize als Select — erster Buchstabe groß, der Rest klein. Nur Wörter in der Schlüsselwortliste des Tools werden umgeschrieben; Tabellennamen, Spaltennamen und andere Bezeichner behalten die Schreibweise, die Sie eingegeben haben.

Behält Minimieren meine Kommentare?

Nein. Minimieren entfernt sowohl einzeilige Kommentare, die mit zwei Bindestrichen beginnen, als auch Blockkommentare zwischen Schrägstrich-Stern-Paaren und zieht anschließend alle Leerraumfolgen zu einem einzigen Leerzeichen zusammen. Der Formatieren-Modus bewahrt Kommentare exakt so, wie sie geschrieben wurden.

Warum beginnt AND eine neue Zeile, statt neben WHERE zu bleiben?

AND und OR stehen in der Zeilenumbruch-Klauselliste, sodass jede Bedingung ihre eigene Zeile erhält. Das ist vorhersehbar, aber flach: Es gibt keine hängende Einrückung, die die Bedingungen unter WHERE visuell verschachtelt, sodass eine lange Kette von ANDs wie eine Liste von Gleichrangigen statt wie ein Baum wirkt.

Ändert die Formatierung, wie die Abfrage ausgeführt wird?

Nein. Der Formatierer verschiebt nur Leerraum und ändert die Schreibweise erkannter Schlüsselwörter, beides ignoriert SQL. Er ordnet nichts um, schreibt nichts neu und validiert nichts, die Bedeutung der Anweisung bleibt also unverändert.

Werden Unterabfragen und Klammern eingerückt?

Nicht nach Verschachtelungstiefe. Der Formatierer verfolgt nur, ob das aktuelle Token eine Klausel beginnt, sodass ein SELECT innerhalb von Klammern auf einer neuen Zeile auf derselben Einrückungsebene wie die äußere Abfrage landet. Für kurze Abfragen lesbar, doch tiefe Verschachtelung erhält nur eine Einrückungsebene.

Geprüft vom HandyTools-Hub-Team · Zuletzt aktualisiert