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 scrive in maiuscolo un elenco fisso di parole chiave SQL ovunque compaiano fuori da una stringa o da un identificatore tra virgolette. Le parole chiave SQL non distinguono tra maiuscole e minuscole, quindi questo cambia l'aspetto della query ma non il suo comportamento. L'elenco comprende le clausole principali (SELECT, FROM, WHERE, GROUP BY, ORDER BY, HAVING, LIMIT, OFFSET), le parole dei join (JOIN, LEFT, RIGHT, INNER, OUTER, FULL, ON), i tipi di istruzione (INSERT, UPDATE, DELETE, CREATE, ALTER, DROP) e gli operatori e connettori comuni (AND, OR, NOT, IN, BETWEEN, LIKE, AS, CASE, WHEN, THEN, ELSE, END, UNION, DISTINCT, VALUES, SET e qualcun altro).

Alcune parole che sembrano parole chiave restano come sono state digitate. Le funzioni di aggregazione come COUNT, SUM e AVG non sono nell'elenco, quindi count(*) resta in minuscolo se è stato digitato in minuscolo. Anche le parole di direzione dell'ordinamento ASC e DESC e i valori letterali TRUE, FALSE e NULL da soli restano invariati. Il testo all'interno di un letterale stringa ('...'), di un identificatore tra virgolette ("...", delle virgolette inverse di MySQL `...` o delle parentesi quadre di SQL Server [...]) o di un commento non viene mai modificato, qualunque cosa contenga.

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. Anche JOIN (e le sue varianti come LEFT JOIN) inizia su una nuova riga. CASE, WHEN, THEN, ELSE e END iniziano ciascuno su una nuova riga, e UNION (o UNION ALL, mantenuti insieme su una riga) è separato da righe vuote. 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 è rientrato di due spazi per ogni livello di annidamento. Una query senza parentesi 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 non chiuse. Una virgoletta singola o doppia aperta ma mai chiusa.
  • Parentesi non bilanciate. Il numero di ( e ) al di fuori di stringhe e commenti deve coincidere.
  • Sottoquery senza parentesi. Un SELECT annidato in un altro, secondo lo schema SELECT ... FROM ... SELECT, non racchiuso tra ( ).
  • WHERE che inizia con AND o OR. Un connettore 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. Segnalato solo quando l'elenco di selezione contiene semplici nomi di colonna; un'espressione, una chiamata di funzione o un letterale dopo SELECT è valido da solo e non viene segnalato.
  • 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 tabelle o colonne esistano davvero, se le colonne unite abbiano tipi compatibili o quali prestazioni avrà una query. Inoltre non segnala ogni regola applicata da un vero database. Due esempi: HAVING usato senza GROUP BY è accettato, perché la presenza di HAVING trasforma una query in una query raggruppata anche senza GROUP BY, quindi il validatore non genera alcun errore. Allo stesso modo, non controlla se ogni colonna non aggregata nell'elenco SELECT compaia anche in GROUP BY. Molti database applicano questa regola, ma questo strumento non la verifica. Anche l'assenza del punto e virgola finale non viene segnalata, perché 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 hanno la condizione ON.» JOIN users non ha alcuna 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.

Scrive in maiuscolo i nomi delle funzioni come COUNT, SUM e AVG?

No. Vengono convertite in maiuscolo solo le parole chiave delle clausole, le parole dei 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, il che è SQL valido, quindi il validatore non la tratta come 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 un JOIN senza condizione. Non controlla nomi di tabelle o colonne, tipi di dati o prestazioni delle query. Serve comunque una vera connessione a un database per confermare che una query funzioni correttamente.

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

  1. PostgreSQL Global Development Group. Lexical Structure. postgresql.org — le parole chiave non distinguono tra maiuscole e minuscole.
  2. Oracle. MySQL 8.0 Reference Manual: Schema Object Names. dev.mysql.com — il backtick è il carattere di citazione degli identificatori di MySQL.
  3. Microsoft. Database Identifiers. learn.microsoft.com — gli identificatori delimitati di SQL Server usano parentesi quadre o virgolette doppie.
  4. PostgreSQL Global Development Group. SELECT. postgresql.org — HAVING rende raggruppata una query anche senza GROUP BY.