Vai al contenuto

Formattatore e Validatore SQL - Formatta Query SQL Online Gratuitamente

Formattatore e validatore SQL gratuito. Formatta automaticamente SQL con rientri e maiuscole corrette. Verifica istantaneamente gli errori di sintassi. Funziona con MySQL, PostgreSQL, SQL Server, Oracle.

Formattatore e Validatore SQL

Formatta e valida query SQL con indentazione automatica, capitalizzazione delle parole chiave e rilevamento degli errori di sintassi.

Inserisci una query SQL per visualizzare il risultato formattato.
Calcolatore di caricamento...
📚

Documentazione

Che cos'è un formattatore e validatore SQL?

Un formattatore SQL è uno strumento che riscrive una query SQL con spaziatura, interruzioni di riga e parole chiave in maiuscolo uniformi, rendendola più facile da leggere. Un validatore SQL controlla la stessa query per individuare errori strutturali, come una virgoletta non chiusa o una parentesi mancante, senza connettersi a un database. Questo strumento svolge entrambe le funzioni. Esegue tutto nel browser, quindi il testo della query non viene mai inviato a un server.

Come formattare una query SQL

  1. Incolla o digita una query SQL nella casella di input.
  2. La versione formattata appare automaticamente a destra, senza dover premere alcun pulsante.
  3. Gli eventuali errori di validazione compaiono in un elenco sotto l'output.
  4. Un pulsante di copia invia la query formattata negli appunti.

Regole di formattazione SQL

Uso delle maiuscole per le parole chiave

Il formattatore converte in maiuscolo un elenco fisso di parole chiave SQL ogni volta che compaiono al di fuori di una stringa o di un identificatore tra virgolette. L'elenco comprende le clausole principali (SELECT, FROM, WHERE, GROUP BY, ORDER BY, HAVING, LIMIT, OFFSET), le parole per le join (JOIN, LEFT, RIGHT, INNER, OUTER, FULL, CROSS, NATURAL, ON, USING), gli operatori insiemistici (UNION, INTERSECT, EXCEPT), i tipi di istruzione (INSERT, UPDATE, DELETE, CREATE, ALTER, DROP) e gli operatori e connettivi comuni (AND, OR, NOT, IN, BETWEEN, LIKE, AS, CASE, WHEN, THEN, ELSE, END, ALL, DISTINCT, VALUES, SET e alcune altre).

Alcune parole che sembrano parole chiave vengono lasciate come sono state digitate. Le funzioni di aggregazione come COUNT, SUM e AVG non sono nell'elenco, quindi count(*) rimane in minuscolo se è stato digitato in minuscolo. Anche le parole che indicano la direzione dell'ordinamento, ASC e DESC, e i valori letterali TRUE, FALSE e NULL, quando compaiono da soli, non vengono modificati. Il testo all'interno di una stringa letterale ('...'), di un identificatore tra virgolette ("...", `...` o [...]) o di un commento non viene mai modificato, indipendentemente dal suo contenuto.

Interruzioni di riga e rientro

Ogni clausola principale inizia su una nuova riga, al margine sinistro: SELECT, FROM, WHERE, GROUP BY, ORDER BY, HAVING, LIMIT e OFFSET. Una join inizia su una nuova riga come unità unica, quindi LEFT JOIN, FULL OUTER JOIN e CROSS JOIN rimangono insieme invece di essere divise su due righe. UNION e UNION ALL hanno una riga vuota sopra e sotto, che separa le query che combinano. CASE e END iniziano una nuova riga, mentre WHEN, THEN e ELSE iniziano una riga con rientro. Anche ogni virgola inizia una nuova riga, quindi un elenco di colonne in SELECT o GROUP BY finisce con una colonna per riga.

Il rientro compare solo all'interno delle parentesi. Il contenuto di una sottoquery o di un'espressione raggruppata viene indentato di due spazi per ogni livello di annidamento. Una query senza parentesi — la maggior parte delle query di uso quotidiano — viene formattata con ogni clausola allineata al margine sinistro e senza alcun rientro.

Esempio: prima e dopo la formattazione

Prima:

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

Dopo:

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

Ogni parola chiave è in maiuscolo e ogni clausola e colonna si trova su una riga separata. Poiché la query non contiene parentesi, nessuna riga è indentata.

Le parentesi modificano questo comportamento. Formattare (select count(*) from employees e where e.department_id = d.id) come parte di una query più grande indenta di due spazi SELECT, FROM e WHERE interni e lascia count in minuscolo perché è il nome di una funzione, non una parola chiave inclusa nell'elenco.

Che cosa controlla il validatore SQL

Il validatore cerca problemi strutturali senza connettersi a un database:

  • Virgolette, parentesi e commenti non chiusi. Una virgoletta singola ('), una virgoletta doppia ("), un accento grave (`), una parentesi quadra ([) o un commento a blocchi (/*) aperto ma mai chiuso.
  • Parentesi non bilanciate. Il numero di ( e ) al di fuori di stringhe e commenti deve coincidere.
  • Sottoquery senza parentesi. Un secondo SELECT che si trova al di fuori di qualsiasi parentesi, come SELECT * FROM SELECT id FROM t. Due query unite da un operatore insiemistico (UNION, UNION ALL, INTERSECT, EXCEPT) non vengono segnalate, perché tali operandi non richiedono parentesi. Lo stesso vale per due istruzioni separate da un punto e virgola.
  • WHERE che inizia con AND o OR. Un connettivo iniziale senza nulla che lo preceda.
  • JOIN senza una condizione corrispondente. Una JOIN richiede una clausola ON o USING. CROSS JOIN e NATURAL JOIN sono esenti, perché non ne prevedono una.
  • GROUP BY o ORDER BY vuoti. La parola chiave della clausola senza colonne successive, alla fine della query.
  • Condizione WHERE incompleta. Un confronto sospeso come WHERE status = senza un valore, oppure un semplice WHERE senza nulla dopo, alla fine della query.
  • Un SELECT senza FROM. Viene segnalato solo quando l'elenco di selezione contiene semplici nomi di colonne. Un'espressione, una chiamata di funzione, un valore letterale o una funzione di valore scritta senza parentesi, come CURRENT_DATE, è valida autonomamente; pertanto SELECT 1 + 1 e SELECT CURRENT_DATE non vengono segnalati.
  • Ordine delle clausole. Vengono effettuati due controlli specifici: GROUP BY non deve precedere WHERE e ORDER BY non deve precedere GROUP BY. I controlli vengono eseguiti al livello principale della query, ignorando ciò che si trova all'interno di una sottoquery.

Che cosa non controlla

Il validatore non sa se le tabelle o le colonne esistono davvero, se le colonne unite hanno tipi compatibili o come verrà eseguita una query. Inoltre, non segnala tutte le regole applicate da un database reale. Due esempi: HAVING usato senza GROUP BY viene accettato, perché raggruppare l'intero risultato in un unico gruppo implicito è SQL valido; pertanto il validatore non genera errori. Analogamente, non controlla se ogni colonna non aggregata nell'elenco SELECT compare anche in GROUP BY: questa regola esiste nella maggior parte dei database, ma questo strumento non la verifica. Non viene segnalato neppure il punto e virgola finale mancante, poiché il punto e virgola è un separatore di istruzioni, non parte di una singola query.

Esempio: errori rilevati dal validatore

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

Questa query produce due errori:

  1. "Una o più istruzioni JOIN non contengono la condizione ON." — JOIN users non ha una clausola ON o USING.
  2. "La condizione WHERE è incompleta." — status = non ha alcun valore dopo il segno di uguale.

Domande frequenti

Questo strumento funziona con MySQL, PostgreSQL, SQL Server e Oracle?

Gestisce la sintassi SQL di base condivisa da questi database: SELECT, JOIN, WHERE, GROUP BY e clausole simili. La sintassi specifica di un database, come i valori letterali di array di PostgreSQL o i blocchi procedurali T-SQL, non interrompe il funzionamento del formattatore, ma potrebbe non ricevere una gestione specifica.

La query SQL viene inviata a un server?

No. La formattazione e la validazione vengono eseguite entrambe nel browser. Il testo della query non viene trasmesso da nessuna parte.

Capitalizza i nomi delle funzioni come COUNT, SUM e AVG?

No. Vengono convertite in maiuscolo solo le parole chiave delle clausole, le parole delle join e un elenco fisso di operatori. I nomi delle funzioni come count, sum e avg, così come le parole asc, desc, true, false e null, vengono lasciati esattamente come sono stati digitati.

Il validatore segnala HAVING usato senza GROUP BY?

No. Una clausola HAVING senza GROUP BY raggruppa l'intero risultato in un unico gruppo, una costruzione valida in SQL secondo lo standard ISO/IEC 9075; pertanto il validatore non la considera un errore.

Il validatore può rilevare ogni errore SQL?

No. Controlla la struttura — parentesi, virgolette, alcune regole sull'ordine delle clausole e alcune lacune logiche comuni, come una JOIN senza condizione. Non controlla i nomi delle tabelle o delle colonne, i tipi di dati né le prestazioni della query. Per confermare che una query venga eseguita correttamente serve comunque una connessione a un database reale.

La formattazione modifica il modo in cui viene eseguita una query?

No. La formattazione modifica solo gli spazi bianchi e le maiuscole delle parole chiave non racchiuse tra virgolette. Tutto ciò che si trova all'interno di una stringa, di un identificatore tra virgolette o di un commento viene copiato senza modifiche, quindi la query mantiene esattamente lo stesso significato.

Riferimenti