Formatera och indentera en SQL-fråga

formaterar dina SQL-frågor för att göra dem läsbara och lätta att underhålla

Varför SQL-formatering?

SQL-formatering gör SQL-förfrågningar mer läsbara och begripliga för utvecklare och databasadministratörer. Det underlättar felsökning, kodgranskning och optimering av förfrågningar. Välformaterad SQL är väsentlig för att upprätthålla kodkvaliteten och samarbeta effektivt inom ett utvecklingsteam.

Typer av SQL-förfrågningar som stöds

Detta verktyg stöder alla typer av SQL-förfrågningar, inklusive SELECT-, INSERT-, UPDATE- och DELETE-satser, samt satser för att skapa och ändra tabeller (CREATE, ALTER, DROP).

Så formaterar du SQL-förfrågningar

På formateringssidan kan du formatera din SQL-förfrågan genom att klistra in den i den angivna textrutan.

Så snart SQL-förfrågan skickas in formateras den och visas i ett resultatområde. Om förfrågan är ogiltig visas ett fel med en indikation om problemets art.

Använda den formaterade SQL:en

Du kan kopiera den formaterade SQL:en med den dedikerade kopieringsknappen. Det underlättar integrationen av SQL-förfrågningar i dina projekt eller rapporter.

Din SQL-kod bör se ut så här:


SELECT u.id, u.name, u.email,
       p.product_name, p.price,
       o.order_date, o.quantity,
       (SELECT SUM(p2.price * o2.quantity)
        FROM orders o2
        JOIN products p2 ON o2.product_id = p2.id
        WHERE o2.user_id = u.id) as total_spent
FROM users u
JOIN orders o ON u.id = o.user_id
JOIN products p ON o.product_id = p.id
WHERE u.id IN (
    SELECT user_id
    FROM orders
    WHERE order_date >= '2023-01-01' AND order_date <= '2023-12-31'
    GROUP BY user_id
    HAVING COUNT(*) > 5
)
AND p.price > 50
ORDER BY u.name ASC, o.order_date DESC
LIMIT 10;

    

Vanliga frågor

Vilka SQL-dialekter stöds: MySQL, PostgreSQL, SQL Server?

Formateraren känner igen standard-SQL-syntax (ANSI) samt de viktigaste utökningarna för MySQL, PostgreSQL, SQL Server (T-SQL), Oracle (PL/SQL) och SQLite. Motorspecifika nyckelord (LIMIT i MySQL och PostgreSQL, TOP i SQL Server, RETURNING i PostgreSQL, MERGE) indenteras korrekt. Inbyggda funktioner specifika för en motor bevaras som de är utan validering.

Hanterar formateraren CTE och rekursiva förfrågningar?

Ja. CTE (Common Table Expressions) som deklareras med WITH ... AS (...) indenteras på sitt eget block, och rekursiva CTE (WITH RECURSIVE) känns igen. Det gör komplexa förfrågningar betydligt mer läsbara, särskilt hierarkier (träd, grafer) och glidande fönster. Korrelerade underfrågor justeras också med sitt överordnade scope.

Vad är skillnaden mellan en SQL-formaterare och en förfrågningsoptimerare?

En SQL-formaterare ändrar inte förfrågans semantik: den organiserar bara om koden visuellt (radbrytningar, indentering, nyckelords gemener/versaler). En optimerare, däremot, skriver om förfrågan eller föreslår ändringar (saknade index, omarrangerade joins, underfrågor att omvandla till joins) för att förbättra prestandan. För att analysera körplanen, använd EXPLAIN eller EXPLAIN ANALYZE beroende på motor.

Bevaras SQL-kommentarer?

Ja. Radkommentarer -- commentaire och flerradskommentarer /* ... */ bevaras på sin ursprungliga plats. Det är väsentligt för att dokumentera en komplex förfrågan eller markera sektioner (TODO, hint för optimeraren, version av en migrering). Om du skickar förfrågan till en motor som tolkar kommenterade hints (/*+ INDEX(...) */ på Oracle) bevaras de också.

Varför skrivs SQL-nyckelord med versaler?

Att skriva nyckelord (SELECT, FROM, WHERE, JOIN) med versaler är en historisk konvention som visuellt skiljer dem från identifierare (tabellnamn, kolumner). Den här praxisen underlättar läsningen, särskilt i långa förfrågningar. Tabell- och kolumnnamn bevaras däremot i sitt ursprungliga skiftläge för att följa schemats konventioner (särskilt i PostgreSQL där skiftläget är känsligt för citerade identifierare).

Validerar formateraren SQL-syntaxen?

Formateraren utför en lätt syntaktisk analys som upptäcker grova fel (obalanserade parenteser, saknat semikolon i slutet av en sats, inkonsekventa nyckelord). Den validerar varken existensen av tabeller och kolumner eller överensstämmelsen med ett specifikt schema. För det, kör förfrågan i EXPLAIN-läge mot din databas, eller använd en dedikerad linter som sqlfluff.

Exempelförfrågan

curl -X POST https://cdrn.fr/api/v1/tools/sql-formatter/execute \
  -H "Content-Type: application/json" \
  -d '{"input":"..."}'

Indatasschema

Fält Typ Obligatorisk Standard
input text

Slutpunkter

  • GET https://cdrn.fr/api/v1/tools - listar alla tillgängliga verktyg
  • GET https://cdrn.fr/api/v1/tools/sql-formatter - hämtar schemat för detta verktyg
  • POST https://cdrn.fr/api/v1/tools/sql-formatter/execute - kör detta verktyg med en JSON-payload