Zum Inhalt springen

SQL-Formatierer & Validator - SQL-Abfragen Online Kostenlos Formatieren

Kostenloser SQL-Formatierer und Validator. Formatiert SQL automatisch mit korrekter Einrückung und Großschreibung. Überprüft Syntaxfehler sofort. Funktioniert mit MySQL, PostgreSQL, SQL Server, Oracle.

SQL-Formatierer & Validator

Formatieren und validieren Sie SQL-Abfragen mit automatischer Einrückung, Schlüsselwort-Großschreibung und Syntaxfehler-Erkennung.

Geben Sie eine SQL-Abfrage ein, um das formatierte Ergebnis zu sehen.
Ladekalkulator...
📚

Dokumentation

Was ist ein SQL-Formatter und -Validator?

Ein SQL-Formatter ist ein Werkzeug, das eine SQL-Abfrage mit einheitlichen Abständen, Zeilenumbrüchen und großgeschriebenen Schlüsselwörtern neu schreibt, damit sie leichter zu lesen ist. Ein SQL-Validator prüft dieselbe Abfrage auf strukturelle Fehler, etwa ein nicht geschlossenes Anführungszeichen oder eine fehlende Klammer, ohne eine Verbindung zu einer Datenbank herzustellen. Dieses Werkzeug erledigt beides. Es läuft vollständig im Browser, sodass der Abfragetext nie an einen Server gesendet wird.

So formatieren Sie eine SQL-Abfrage

  1. Fügen Sie eine SQL-Abfrage in das Eingabefeld ein oder geben Sie sie dort ein.
  2. Die formatierte Version erscheint automatisch rechts, ohne dass eine Schaltfläche betätigt werden muss.
  3. Validierungsfehler werden in einer Liste unterhalb der Ausgabe angezeigt.
  4. Eine Kopierschaltfläche kopiert die formatierte Abfrage in die Zwischenablage.

Regeln für die SQL-Formatierung

Großschreibung von Schlüsselwörtern

Der Formatter schreibt eine festgelegte Liste von SQL-Schlüsselwörtern überall dort in Großbuchstaben, wo sie außerhalb eines Strings oder eines in Anführungszeichen gesetzten Bezeichners vorkommen. Die Liste umfasst die wichtigsten Klauseln (SELECT, FROM, WHERE, GROUP BY, ORDER BY, HAVING, LIMIT, OFFSET), Join-Schlüsselwörter (JOIN, LEFT, RIGHT, INNER, OUTER, FULL, CROSS, NATURAL, ON, USING), Mengenoperatoren (UNION, INTERSECT, EXCEPT), Anweisungstypen (INSERT, UPDATE, DELETE, CREATE, ALTER, DROP) sowie gängige Operatoren und Verknüpfungen (AND, OR, NOT, IN, BETWEEN, LIKE, AS, CASE, WHEN, THEN, ELSE, END, ALL, DISTINCT, VALUES, SET und einigen weiteren).

Einige Wörter, die wie Schlüsselwörter aussehen, werden so belassen, wie sie eingegeben wurden. Aggregatfunktionen wie COUNT, SUM und AVG stehen nicht auf der Liste. Daher bleibt count(*) kleingeschrieben, wenn es kleingeschrieben eingegeben wurde. Auch die Sortierrichtungswörter ASC und DESC sowie die alleinstehenden Literale TRUE, FALSE und NULL werden nicht verändert. Text innerhalb eines String-Literals ('...'), eines in Anführungszeichen gesetzten Bezeichners ("...", `...` oder [...]) oder eines Kommentars wird unabhängig von seinem Inhalt niemals geändert.

Zeilenumbrüche und Einrückung

Jede Hauptklausel beginnt in einer neuen Zeile am linken Rand: SELECT, FROM, WHERE, GROUP BY, ORDER BY, HAVING, LIMIT und OFFSET. Ein Join beginnt als Einheit in einer neuen Zeile. Daher bleiben LEFT JOIN, FULL OUTER JOIN und CROSS JOIN zusammen, statt auf zwei Zeilen verteilt zu werden. UNION und UNION ALL erhalten darüber und darunter eine Leerzeile, die die verbundenen Abfragen voneinander trennt. CASE und END beginnen eine neue Zeile; WHEN, THEN und ELSE beginnen eine eingerückte Zeile. Auch jedes Komma beginnt eine neue Zeile, sodass eine Spaltenliste in SELECT oder GROUP BY eine Spalte pro Zeile enthält.

Einrückungen erscheinen nur innerhalb von Klammern. Der Inhalt einer Unterabfrage oder eines gruppierten Ausdrucks wird pro Verschachtelungsebene um zwei Leerzeichen eingerückt. Eine Abfrage ohne Klammern — der Großteil der alltäglichen Abfragen — wird mit allen Klauseln direkt am linken Rand und ganz ohne Einrückung formatiert.

Beispiel: Formatierung vorher und nachher

Vorher:

1select id, first_name, last_name, email from customers where status = 'active' order by last_name, first_name;
2

Nachher:

1SELECT id,
2first_name,
3last_name,
4email
5FROM customers
6WHERE status = 'active'
7ORDER BY last_name,
8first_name;
9

Jedes Schlüsselwort steht in Großbuchstaben, und jede Klausel sowie jede Spalte steht in einer eigenen Zeile. Da die Abfrage keine Klammern enthält, ist keine Zeile eingerückt.

Klammern ändern dies. Bei der Formatierung von (select count(*) from employees e where e.department_id = d.id) als Teil einer größeren Abfrage werden das innere SELECT, FROM und WHERE um zwei Leerzeichen eingerückt. count bleibt kleingeschrieben, weil es ein Funktionsname und kein gelistetes Schlüsselwort ist.

Was der SQL-Validator prüft

Der Validator sucht ohne Datenbankverbindung nach strukturellen Problemen:

  • Nicht geschlossene Anführungszeichen, Klammern und Kommentare. Ein einfaches Anführungszeichen ('), doppeltes Anführungszeichen ("), Backtick (`), eckige Klammer ([) oder Blockkommentar (/*), das geöffnet, aber nie geschlossen wurde.
  • Nicht ausgeglichene Klammern. Die Anzahl von ( und ) außerhalb von Strings und Kommentaren muss übereinstimmen.
  • Unterabfragen ohne Klammern. Ein zweites SELECT, das außerhalb jeglicher Klammern steht, etwa SELECT * FROM SELECT id FROM t. Zwei durch einen Mengenoperator verbundene Abfragen (UNION, UNION ALL, INTERSECT, EXCEPT) werden nicht beanstandet, weil diese Operanden keine Klammern benötigen. Ebenso wenig werden zwei durch ein Semikolon getrennte Anweisungen beanstandet.
  • WHERE beginnt mit AND oder OR. Eine führende Verknüpfung ohne vorangehenden Ausdruck.
  • JOIN ohne passende Bedingung. Ein JOIN benötigt eine ON- oder USING-Klausel. CROSS JOIN und NATURAL JOIN sind ausgenommen, da sie keine solche Klausel verwenden.
  • Leeres GROUP BY oder ORDER BY. Das Klauselschlüsselwort steht am Ende der Abfrage ohne nachfolgende Spalten.
  • Eine unvollständige WHERE-Bedingung. Ein unvollständiger Vergleich wie WHERE status = ohne Wert oder ein alleinstehendes WHERE ohne nachfolgenden Inhalt am Ende der Abfrage.
  • Ein SELECT ohne FROM. Dies wird nur beanstandet, wenn die Auswahlliste aus einfachen Spaltennamen besteht. Ein Ausdruck, ein Funktionsaufruf, ein Literal oder eine ohne Klammern geschriebene Wertfunktion wie CURRENT_DATE ist allein gültig. Daher werden SELECT 1 + 1 und SELECT CURRENT_DATE nicht beanstandet.
  • Reihenfolge der Klauseln. Es gibt zwei konkrete Prüfungen: GROUP BY darf nicht vor WHERE stehen, und ORDER BY darf nicht vor GROUP BY stehen. Diese Prüfungen erfolgen auf der obersten Abfrageebene; Inhalte von Unterabfragen werden ignoriert.

Was nicht geprüft wird

Der Validator weiß nicht, ob Tabellen oder Spalten tatsächlich existieren, ob verbundene Spalten kompatible Datentypen haben oder wie eine Abfrage ausgeführt wird. Außerdem beanstandet er nicht jede Regel, die eine echte Datenbank durchsetzt. Zwei Beispiele: HAVING ohne GROUP BY wird akzeptiert, weil das Gruppieren des gesamten Ergebnisses zu einer impliziten Gruppe in SQL zulässig ist; der Validator meldet dafür also keinen Fehler. Ebenso wird nicht geprüft, ob jede nicht aggregierte Spalte in der SELECT-Liste auch in GROUP BY vorkommt — diese Regel gibt es in den meisten Datenbanken, aber dieses Werkzeug prüft sie nicht. Ein fehlendes abschließendes Semikolon wird ebenfalls nicht beanstandet, da ein Semikolon ein Anweisungstrenner und kein Bestandteil einer einzelnen Abfrage ist.

Beispiel: Vom Validator erkannte Fehler

1SELECT id FROM orders
2JOIN users
3WHERE status =
4

Diese Abfrage erzeugt zwei Fehler:

  1. „Bei einer oder mehreren JOIN-Anweisungen fehlt die ON-Bedingung.“ — JOIN users enthält keine ON- oder USING-Klausel.
  2. „Die WHERE-Bedingung ist unvollständig.“ — Nach dem Gleichheitszeichen in status = fehlt ein Wert.

Häufig gestellte Fragen

Funktioniert dieses Werkzeug mit MySQL, PostgreSQL, SQL Server und Oracle?

Es verarbeitet die grundlegende SQL-Syntax, die diese Datenbanken gemeinsam haben: SELECT, JOIN, WHERE, GROUP BY und ähnliche Klauseln. Datenbankspezifische Syntax, etwa PostgreSQL-Array-Literale oder prozedurale T-SQL-Blöcke, bringt den Formatter nicht aus dem Tritt, erhält aber möglicherweise keine spezielle Behandlung.

Wird die SQL-Abfrage an einen Server gesendet?

Nein. Formatierung und Validierung laufen beide im Browser. Der Abfragetext wird nirgendwohin übertragen.

Werden Funktionsnamen wie COUNT, SUM und AVG großgeschrieben?

Nein. Nur Klauselschlüsselwörter, Join-Schlüsselwörter und eine festgelegte Liste von Operatoren werden großgeschrieben. Funktionsnamen wie count, sum und avg sowie die Wörter asc, desc, true, false und null bleiben genau so, wie sie eingegeben wurden.

Meldet der Validator HAVING ohne GROUP BY als Fehler?

Nein. Eine HAVING-Klausel ohne GROUP BY gruppiert das gesamte Ergebnis zu einer einzigen Gruppe. Dies ist gemäß dem Standard 9075 ISO/IEC gültiges SQL, daher behandelt der Validator es nicht als Fehler.

Kann der Validator jeden SQL-Fehler erkennen?

Nein. Er prüft die Struktur — Klammern, Anführungszeichen, einige Regeln zur Reihenfolge von Klauseln und einige häufige logische Lücken wie einen JOIN ohne Bedingung. Tabellen- oder Spaltennamen, Datentypen und die Abfrageleistung werden nicht geprüft. Um zu bestätigen, dass eine Abfrage korrekt ausgeführt wird, ist weiterhin eine echte Datenbankverbindung erforderlich.

Ändert die Formatierung die Ausführung einer Abfrage?

Nein. Die Formatierung ändert nur Leerraum und die Großschreibung nicht in Anführungszeichen gesetzter Schlüsselwörter. Alles innerhalb eines Strings, eines in Anführungszeichen gesetzten Bezeichners oder eines Kommentars wird unverändert übernommen, sodass die Abfrage genau dieselbe Bedeutung wie zuvor hat.

Referenzen