RunToolz iconRunToolz
Welcome to RunToolz!
SQLDatenbankCodequalität

Lesbares SQL ist nicht optional

Wie du SQL-Abfragen so formatierst, dass dein zukünftiges Ich (und Teamkollegen) dich nicht hassen.

RunToolz Team28. Januar 20263 min read

Du erbst eine Abfrage. Sie ist eine Zeile. 400 Zeichen. Mehrere Joins, Subqueries und CASE-Statements, alles zusammengequetscht.

Viel Glück beim Verstehen.

SQL-Formatierung geht nicht um Ästhetik. Es geht darum, ob Abfragen wartbar sind.

Das Problem mit dichtem SQL

SELECT u.id,u.name,o.total,p.name FROM users u JOIN orders o ON u.id=o.user_id JOIN products p ON o.product_id=p.id WHERE o.created_at>'2024-01-01' AND u.status='active' ORDER BY o.total DESC;

Wo ist die Join-Bedingung? Was wird gefiltert? Aus welcher Tabelle kommt jede Spalte?

Stell dir jetzt vor, das um 2 Uhr nachts zu debuggen.

Möchten Sie es selbst ausprobieren?SQL formatieren

Dieselbe Abfrage, lesbar

SELECT
    u.id,
    u.name,
    o.total,
    p.name
FROM users u
JOIN orders o ON u.id = o.user_id
JOIN products p ON o.product_id = p.id
WHERE o.created_at > '2024-01-01'
    AND u.status = 'active'
ORDER BY o.total DESC;

Jede Klausel hat ihre eigene Zeile. Bedingungen richten sich aus. Die Struktur ist sichtbar.

Formatierungs-Regeln, die funktionieren

Eine Klausel pro Zeile. SELECT, FROM, WHERE, ORDER BY bekommen jeweils ihre eigene Zeile.

Spalten auf separaten Zeilen. Lange SELECT-Listen werden scannbar.

Einrücken fortgesetzter Bedingungen. Mehrere WHERE-Bedingungen richten sich aus.

Großbuchstaben für Schlüsselwörter. SELECT, FROM, WHERE heben sich von Tabellennamen und Spalten ab.

Konsistente Groß-/Kleinschreibung. Wähle einen Stil. Bleib dabei.

Subquery-Formatierung

Subqueries werden schnell unübersichtlich. Rücke sie klar ein:

SELECT *
FROM orders
WHERE user_id IN (
    SELECT id
    FROM users
    WHERE status = 'premium'
)

Oder verwende CTEs, wenn Subqueries komplex werden:

WITH premium_users AS (
    SELECT id
    FROM users
    WHERE status = 'premium'
)
SELECT *
FROM orders
WHERE user_id IN (SELECT id FROM premium_users)

CTEs sind oft klarer als verschachtelte Subqueries.

JOIN-Formatierung

Gib immer Join-Typen an. JOIN allein ist INNER JOIN, aber explizit ist besser.

SELECT *
FROM orders o
INNER JOIN users u ON o.user_id = u.id
LEFT JOIN shipping s ON o.id = s.order_id

Setze die Join-Bedingung auf dieselbe Zeile für einfache Joins. Breche zur nächsten Zeile für komplexe Bedingungen.

Was ist mit Performance?

Formatierung beeinflusst die Ausführung nicht. Der Datenbank-Optimizer kümmert sich nicht um Leerraum.

Aber formatiertes SQL ist einfacher zu optimieren. Du kannst die Struktur sehen, unnötige Joins identifizieren, fehlende Indizes erkennen.

Unlesbares SQL verbirgt Performance-Probleme.

Team-Standards

Wähle einen Stil. Dokumentiere ihn. Erzwinge mit automatisierten Formatierern.

Verschiedene Stile existieren. Einige Teams setzen Kommas an den Zeilenanfang. Einige schreiben alles groß. Einige nicht.

Konsistenz ist wichtiger als welchen Stil du wählst.


Jede Abfrage wird öfter gelesen als geschrieben. Formatiere für Lesbarkeit. Deine Teamkollegen – und dein zukünftiges Ich – werden dir danken.