Un formattatore SQL per query leggibili
Una query scritta tutta di seguito su una sola riga funziona, ma si legge male, ed è proprio quello che si trova spesso in un file di log o nel codice di un'applicazione. Formattare SQL significa dividere la query in clausole allineate e rientrate, per vedere subito quali colonne vengono lette, quali tabelle vengono unite e quali filtri si applicano. Uno stile comune semplifica anche la revisione del codice: il confronto tra due versioni mostra solo le modifiche vere.
Come si usa
- Incolla una o più query in «La tua query SQL» oppure apri un file .sql. «Esempio» carica una query con JOIN, sottoquery e CASE.
- Scegli il «Dialetto»: SQL standard, MySQL / MariaDB, PostgreSQL, SQLite o SQL Server.
- Imposta le «Parole chiave» (In MAIUSCOLO, In minuscolo, Invariate), il «Rientro», le «Colonne» (Una per riga o Su una sola riga) e le «Virgole» (A fine riga o A inizio riga).
- Fai clic su «Formatta» o «Minifica», poi su «Copia» o «Scarica (.sql)».
Esempio e convenzioni
Prendiamo select id, nome from clienti where citta = 'Torino' and attivo = 1 order by nome;, lunga 81 caratteri. Con le impostazioni predefinite lo strumento restituisce 10 righe: SELECT da solo, poi id, e nome rientrati di due spazi, FROM e clienti, WHERE seguito da citta = 'Torino', quindi AND attivo = 1 su una riga propria e infine ORDER BY e nome;. Minificata, la stessa query sta in 76 caratteri: SELECT id,nome FROM clienti WHERE citta='Torino' AND attivo=1 ORDER BY nome;.
Queste scelte seguono le convenzioni più diffuse:
- parole chiave in maiuscolo, nomi di tabelle e colonne lasciati come li hai scritti;
- una clausola principale per riga: SELECT, FROM, WHERE, GROUP BY, HAVING, ORDER BY, LIMIT, UNION, INSERT INTO, VALUES, UPDATE, SET, DELETE FROM, CREATE TABLE;
- ogni JOIN apre una riga con la sua condizione ON, e ogni AND o OR di un filtro va a capo, tranne quello di un BETWEEN;
- una sottoquery ha un livello di rientro in più, e un CASE mette ogni WHEN e l'ELSE su righe separate.
Cosa lo strumento non modifica mai
L'analizzatore riconosce le stringhe tra apici singoli, gli identificatori tra virgolette doppie, apici inversi o parentesi quadre, i commenti -- e /* */, i numeri, gli operatori e i parametri (?, :nome, $1). Il contenuto di stringhe e commenti viene ricopiato carattere per carattere: in WHERE nota = 'select from where' le tre parole restano in minuscolo.
I dialetti si distinguono soprattutto nel modo di citare i nomi: apici inversi e commenti # in MySQL, parentesi quadre come [Nome cliente] in SQL Server, stringhe $$…$$ e operatore :: in PostgreSQL.
Se un apice, un commento o una parentesi restano aperti, lo strumento formatta comunque e indica riga e colonna del problema. Non è una validazione completa: un errore nel nome di una tabella o una virgola dimenticata non vengono rilevati, e nessuna query viene eseguita su un database.
Domande frequenti
La formattazione può cambiare il risultato della query?
No. Cambiano solo gli spazi e le maiuscole delle parole chiave, che per SQL sono indifferenti. Attenzione a una colonna senza virgolette che si chiama come una parola chiave (date, text, key): subisce lo stesso trattamento. Mettila tra virgolette oppure scegli «Invariate».
Posso formattare uno script di migliaia di righe?
Sì. Le query separate da «;» vengono trattate una dopo l'altra e separate da una riga vuota. Il calcolo avviene in background senza bloccare la pagina: 5.000 righe richiedono meno di un secondo su un computer recente. Sono accettati file fino a 20 MB.
Minificare e poi riformattare dà lo stesso risultato?
Sì, a parità di impostazioni, perché la formattazione dipende solo dalla sequenza degli elementi. La minificazione conserva i commenti -- e aggiunge un a capo dopo ciascuno, così non inghiottono il resto della query.