Formatta SQL

Abbellisci e formatta le query SQL. Più dialetti. Gratis, per sempre.
Dialetto SQL
SQL di input
SQL formattato
SQL di input

Privato e sicuro

Tutto accade nel tuo browser. I tuoi file non toccano mai i nostri server.

Velocissimo

Nessun caricamento, nessuna attesa. Converti nel momento in cui rilasci un file.

Realmente gratuito

Nessun account richiesto. Nessun costo nascosto. Nessun trucco sulle dimensioni dei file.

SQL (Structured Query Language) è il linguaggio comune parlato da quasi ogni database relazionale serio sul pianeta—da PostgreSQL, MySQL, e SQLite ai sistemi commerciali come SQL Server e Oracle. Ti permette di definire strutture di dati, memorizzare dati, interrogarli in modo efficiente e far rispettare regole su come si comportano quei dati.

Di seguito c'è un tour approfondito di circa 2.500 parole su SQL: cos'è, come funziona e come usarlo bene nei sistemi reali.

1. Cos'è SQL (e perché è ancora importante)

SQL è un linguaggio dichiarativo: descrivi cosa dati vuoi, e il database decide come ottenerli. Tutorial come la guida SQL su W3Schools e la serie SQL di W3Schools.in presentano SQL come linguaggio standard per memorizzare, manipolare e recuperare dati in molti motori di database.

Poiché SQL è standardizzato e ampiamente supportato, puoi usare lo stesso modello mentale per:

  • applicazioni web su MySQL o PostgreSQL
  • applicazioni incorporate usando SQLite
  • sistemi aziendali come SQL Server o Oracle

La maggior parte dei dati aziendali quotidiani—ordini, utenti, pagamenti, log, analisi—vengono infine memorizzati in tabelle che puoi interrogare con SQL.

2. Standard e dialetti SQL

SQL è standardizzato dalla famiglia di standard ISO/IEC 9075, che definisce il linguaggio centrale e molte estensioni opzionali. Lo standard si è evoluto attraverso versioni come SQL-86, SQL-92, SQL:1999, SQL:2003, e fino a SQL:2023. Articoli come la panoramica ANSI sullo standard SQL ISO/IEC 9075:2023 spiegano come gli standard ANSI e ISO si allineano nel tempo.

Lo standard stesso è diviso in più parti, come:

  • Parte 1 (Framework) e Parte 2 (Foundation)
  • Parte 3 (Call-Level Interface) per le API
  • Parte 4 (Persistent Stored Modules) per le stored procedure
  • Parti successive come SQL/XML, SQL/MED, e persino SQL/PGQ per query su grafi di proprietà

Puoi vedere l'elenco completo nella pagina del catalogo ISO per SQL e in risorse come la suddivisione di Modern SQL delle parti dello standard.

In pratica, ogni database implementa il proprio dialetto:

I concetti centrali—tabelle, righe, colonne, join, aggregati—sono portabili, ma qualsiasi sistema non banale comporterà l'apprendimento delle peculiarità e delle caratteristiche di un dialetto specifico.

3. Fondamenti relazionali: Tabelle, Righe, Chiavi

Nel cuore, SQL è progettato attorno al modello relazionale: i dati vivono in tabelle (relazioni), dove ogni riga rappresenta un fatto e ogni colonna descrive un attributo.

Gli elementi tipici includono:

  • Tabella: es. customers, orders
  • Colonna: es. id, name, order_date, total_amount
  • Chiave primaria: un identificatore univoco per ogni riga (spesso un id)
  • Chiave esterna: una colonna che fa riferimento alla chiave primaria di un'altra tabella (es. orders.customer_id customers.id)

Le guide alla normalizzazione—come il tutorial sulla normalizzazione di DigitalOcean o la spiegazione di freeCodeCamp su 1NF, 2NF, 3NF—inquadrano un buon design relazionale come minimizzazione della ridondanza e prevenzione delle anomalie di aggiornamento dividendo i dati in tabelle ben strutturate e collegandole con chiavi.

Quando interroghi con SQL, essenzialmente stai chiedendo al database: "Da queste tabelle, sotto queste condizioni, quali righe e colonne dovrei vedere?"

4. La query centrale: SELECT

L'istruzione SELECT è il cavallo di battaglia di SQL e probabilmente il suo comando più complesso. La riferimento SELECT di SQLite la chiama "il comando più complicato nel linguaggio SQL", e sia la documentazione SELECT di MySQL che tutorial come la guida SELECT di SQLite Tutorial attraversano le sue molte opzioni.

SELECT id, name
FROM customers;

Parti chiave:

  • SELECT elenca le colonne (o * per tutte le colonne, anche se di solito è meglio essere espliciti).
  • FROM seleziona una o più tabelle.
  • WHERE filtra le righe.
  • ORDER BY ordina i risultati.
  • LIMIT limita quante righe vedi.
SELECT id, name, created_at
FROM customers
WHERE active = TRUE
ORDER BY created_at DESC
LIMIT 50;

I tutorial introduttivi come il tutorial SQL di W3Schools e la panoramica W3Schools MySQL sui comandi comuni usano SELECT per mostrare come estrai dati dalle tabelle in una singola espressione leggibile.

5. Filtraggio, ordinamento ed espressioni

SQL brilla quando combini filtraggio ed espressioni direttamente nella query:

SELECT
 id,
 total_amount,
 total_amount * 0.1 AS tax_estimate
FROM orders
WHERE status = 'paid'
 AND total_amount >= 100
ORDER BY total_amount DESC;

La clausola WHERE può usare operatori di confronto (=, <>, >, <), operatori logici (AND, OR, NOT), corrispondenza di pattern (LIKE, ILIKE), e altro. Database come MySQL documentano un ricco insieme di funzioni e operatori incorporati per operazioni numeriche, stringa, data/ora, JSON e altre.

Puoi anche:

  • usare IN per corrispondere a un elenco: WHERE status IN ('paid', 'refunded')
  • usare BETWEEN per intervalli: WHERE created_at BETWEEN '2025-01-01' AND '2025-01-31'
  • usare IS NULL / IS NOT NULL per gestire valori mancanti

Buoni tutorial e manuali enfatizzano che le espressioni appaiono in molte clausole— WHERE, ORDER BY, HAVING, e persino SELECT stesso. La documentazione MySQL evidenzia questo nella sua sezione sulla valutazione delle espressioni all'interno del capitolo su funzioni e operatori.

6. Unire tabelle

I database reali raramente mantengono tutto in una singola tabella. Invece, normalizzi i dati in più tabelle e le unisci quando interroghi. Le join sono ampiamente coperte in risorse come la pagina W3Schools sulle join SQL, tutorial sulle join di GeeksforGeeks, panoramica sulle join di TutorialsPoint, e guide interattive come il tutorial sulle join SQL su SQL Practice Online.

SELECT
 id,
 c.name,
 o.order_date,
 o.total_amount
FROM orders AS o
JOIN customers AS c
 ON c.id = o.customer_id;

Tipi di join comuni:

  • INNER JOIN – solo righe con corrispondenze in entrambe le tabelle
  • LEFT JOIN – tutte le righe dalla tabella sinistra, più corrispondenze da destra
  • RIGHT JOIN – opposto della left join (non supportato in alcuni motori come SQLite)
  • FULL OUTER JOIN – righe da entrambi i lati, anche se non corrispondenti

Spiegazioni visive e basate sul codice, come l' articolo "SQL joins explained" di DbSchema o gli esempi di join di LearnSQL.com, sono ottimi modi per costruire una forte intuizione su come si comportano le join.

7. Aggregazione, raggruppamento e funzioni finestra

Per riassumere i dati—totali, medie, conteggi—usi funzioni di aggregazione (COUNT, SUM, AVG, MIN, MAX) con GROUP BY:

SELECT
 customer_id,
 COUNT(*) AS order_count,
 SUM(total_amount) AS total_spent
FROM orders
WHERE status = 'paid'
GROUP BY customer_id
HAVING SUM(total_amount) >= 1000
ORDER BY total_spent DESC;

Riferimenti come il capitolo su funzioni e operatori di MySQL e la documentazione PostgreSQL su funzioni di aggregazione e finestra catalogano le funzioni incorporate che puoi usare in queste espressioni.

SQL moderno supporta anche funzioni finestra, che ti permettono di calcolare aggregati su "finestre" scorrevoli di righe mentre restituisci ancora righe individuali—ad esempio, totali cumulativi o classifiche. Le funzioni finestra entrarono in SQL attraverso emendamenti a SQL:1999, poi integrate in SQL:2003, come riassunto nelle note sugli standard SQL:1999 e SQL:2003.

SELECT
 customer_id,
 order_date,
 total_amount,
 SUM(total_amount) OVER (
   PARTITION BY customer_id
   ORDER BY order_date
 ) AS running_total
FROM orders;

Questo tipo di query è estremamente potente per analisi direttamente nel database.

8. Definizione dei dati: Creare ed evolvere schemi

SQL non è solo per interrogare; definisce anche la forma dei tuoi dati attraverso istruzioni Data Definition Language (DDL), ben documentate in sezioni come la guida alla Definizione dei Dati di PostgreSQL e il capitolo sulle istruzioni SQL di MySQL.

Comandi DDL comuni:

  • CREATE DATABASE my_app; – creare un database
  • CREATE TABLE customers (...); – definire una tabella
  • ALTER TABLE customers ADD COLUMN phone TEXT; – modificare la struttura della tabella
  • DROP TABLE customers; – rimuovere una tabella
CREATE TABLE customers (
 id           SERIAL PRIMARY KEY,
 email        VARCHAR(255) UNIQUE NOT NULL,
 name         TEXT NOT NULL,
 created_at   TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
 active       BOOLEAN NOT NULL DEFAULT TRUE
);

Punti da notare:

  • Tipi di dati: interi, stringhe, date, booleani, JSON, ecc.
  • Vincoli: PRIMARY KEY, UNIQUE, NOT NULL, espressioni CHECK
  • Valori predefiniti e colonne generate

Ogni manuale RDBMS principale—la sezione sul linguaggio SQL di PostgreSQL, il manuale di riferimento MySQL, e la riferimento al linguaggio SQLite—enfatizza di pensare attentamente al DDL, perché le decisioni sullo schema sono difficili da cambiare in seguito.

9. Transazioni, concorrenza e vincoli

I database SQL generalmente implementano le proprietà ACID—Atomicità, Consistenza, Isolamento, Durabilità—attraverso transazioni:

BEGIN;

UPDATE accounts
SET balance = balance - 200
WHERE id = 1;

UPDATE accounts
SET balance = balance + 200
WHERE id = 2;

COMMIT;

Se qualcosa fallisce tra BEGIN e COMMIT, la transazione può essere annullata in modo che le modifiche intermedie non trapelino nel database.

La sezione di MySQL su istruzioni transazionali e di blocco copre START TRANSACTION, COMMIT, ROLLBACK, e savepoint, mentre i capitoli di PostgreSQL su controllo della concorrenza e gestione delle transazioni spiegano come funzionano i livelli di isolamento e MVCC sotto il cofano.

I vincoli—come chiavi esterne o vincoli di controllo—sono il modo del database per far rispettare le regole aziendali:

ALTER TABLE orders
ADD CONSTRAINT fk_orders_customer
FOREIGN KEY (customer_id)
REFERENCES customers (id);

Usati bene, trasformano il tuo database in un guardiano di invarianti, prevenendo dati non validi alla fonte invece di fare affidamento solo sulla logica dell'applicazione.

10. Design dello schema e normalizzazione

Fare lo schema correttamente è spesso più importante delle query intelligenti. La normalizzazione è il processo di strutturare le tabelle per ridurre la ridondanza e migliorare la consistenza. Tutorial come:

Progressione tipica:

  • 1NF: nessun gruppo ripetitivo; ogni colonna contiene valori atomici.
  • 2NF: ogni attributo non-chiave dipende dall'intera chiave primaria (per chiavi composite).
  • 3NF: nessuna dipendenza transitiva (gli attributi non-chiave non dipendono da altri attributi non-chiave).

La sovra-normalizzazione può danneggiare le prestazioni e complicare le query; i team pragmatici spesso normalizzano a 3NF e poi denormalizzano selettivamente (ad esempio, memorizzando nella cache aggregati) dove le prestazioni lo richiedono.

11. Indici e prestazioni delle query

Gli indici sono lo strumento principale per rendere veloci le query SQL. Sono strutture di dati ausiliarie che permettono al database di saltare direttamente alle righe rilevanti invece di scansionare intere tabelle.

Una risorsa molto rispettata sull'indicizzazione è Use The Index, Luke! di Markus Winand, un libro online gratuito che si concentra completamente sulle prestazioni SQL e sulla strategia di indicizzazione. La pagina principale del sito, UseTheIndexLuke.com, e articoli come "Indexing LIKE filters" e "More indexes, slower INSERT" spiegano quando gli indici aiutano e quando danneggiano.

Idee chiave:

  • Gli indici B-tree accelerano le ricerche di uguaglianza e intervallo (WHERE email = ..., WHERE created_at >= ...).
  • Gli indici compositi considerano l'ordine delle colonne—ad esempio, (customer_id, created_at) funziona bene per WHERE customer_id = ? AND created_at >= ?.
  • Gli indici aiutano SELECT, UPDATE, e DELETE con filtri, ma rallentano gli inserimenti perché ogni inserimento deve aggiornare tutti gli indici rilevanti.

Guide come l' articolo MSSQLTips sul design degli indici SQL Server dimostrano come la scelta e l'ordine delle colonne in un indice impattano query reali.

Regole pratiche:

  • Indicizza le tue chiavi primarie e colonne join/filtro frequenti.
  • Evita di indicizzare ogni colonna—troppi indici uccidono le prestazioni di scrittura.
  • Usa EXPLAIN/EXPLAIN ANALYZE del database per vedere come vengono eseguite le query.

12. Caratteristiche SQL moderne: CTE, JSON e oltre

Mentre i fondamenti sono rimasti stabili, SQL moderno è cresciuto significativamente:

  • Le Common Table Expressions (CTE) tramite WITH permettono query più leggibili e modulari:
    WITH recent_orders AS (
     SELECT *
     FROM orders
     WHERE order_date >= CURRENT_DATE - INTERVAL '7 days'
    )
    SELECT customer_id, COUNT(*) 
    FROM recent_orders
    GROUP BY customer_id;
  • Il supporto JSON ti permette di mescolare dati semi-strutturati con tabelle relazionali. PostgreSQL, MySQL e altri documentano funzioni JSON estese nei loro manuali, come le caratteristiche JSON di MySQL elencate sotto funzioni JSON.
  • Tipi di dati avanzati (array, hstore, geometria, ricerca full-text) sono descritti nei capitoli sui tipi di dati e indici di PostgreSQL nel manuale PostgreSQL.

Lo standard SQL stesso ha aggiunto parti per XML, array multidimensionali e query su grafi di proprietà, come documentato nel catalogo dello standard SQL ISO e in articoli sull'evoluzione di SQL come l' articolo sullo standard SQL ANSI.

SQL moderno è abbastanza potente che molte applicazioni possono spingere logica complessa—gerarchie, analisi, elaborazione eventi—verso il livello del database.

13. Imparare SQL efficacemente

Poiché SQL rimane fondamentale per il lavoro sui dati, c'è un ricco ecosistema di risorse di apprendimento:

Una strategia di apprendimento pratica:

  1. Padroneggia SELECT e filtraggio di base. Inizia con query semplici e aggiungi gradualmente WHERE, ORDER BY, e LIMIT.
  2. Familiarizza con le join. Pratica tutti i tipi di join fino a quando puoi prevedere i risultati con sicurezza.
  3. Aggiungi raggruppamento e aggregazione. Impara a rispondere a domande come "entrate per mese" o "top 10 clienti" con GROUP BY.
  4. Impara il design dello schema. Studia la normalizzazione e pratica la modellazione di sistemi reali—ad esempio, negozi, sistemi di prenotazione, reti sociali.
  5. Esplora le caratteristiche del tuo motore preferito. Leggi la documentazione ufficiale del tuo database—la sezione sul linguaggio SQL di PostgreSQL, il manuale di riferimento MySQL, o la riferimento al linguaggio SQLite—per scoprire strumenti specifici del motore.
  6. Infine, impara le prestazioni. Sperimenta con gli indici usando i concetti in Use The Index, Luke! e risorse simili, e profila le query con EXPLAIN.

Se puoi leggere e scrivere SQL comodamente, puoi ispezionare i dati direttamente in produzione, costruire report senza esportare in fogli di calcolo, debuggare la logica dell'applicazione guardando le tabelle sottostanti, e collaborare più efficacemente con ingegneri e analisti.

14. Il quadro generale

SQL si trova a un'intersezione unica: ha più di 40 anni, ma è profondamente rilevante nei sistemi cloud-native e pesanti di analisi oggi. Lo standard ISO/IEC 9075 e le sue molte parti continuano a evolversi, mentre database open-source come PostgreSQL, MySQL, e SQLite spingono caratteristiche pratiche e miglioramenti delle prestazioni.

Se lavori con i dati—sviluppatore, analista, scienziato dei dati o product manager—SQL è il linguaggio condiviso che ti permette di fare domande direttamente al database. Vale la pena impararlo una volta, e ripaga per il resto della tua carriera.

Domande Frequenti

Cos'è la formattazione SQL?

La formattazione SQL è il processo di organizzazione delle query SQL con indentazione appropriata, interruzioni di riga e maiuscole/minuscole delle parole chiave per migliorare la leggibilità e la manutenibilità.

Quali dialetti SQL sono supportati?

Il nostro formattatore supporta più dialetti SQL inclusi MySQL, PostgreSQL, SQL Server, SQLite, Oracle e molti altri.

Il mio codice SQL è sicuro?

Sì! Tutta la formattazione SQL avviene interamente nel tuo browser. Le tue query non lasciano mai il tuo computer, garantendo privacy e sicurezza complete.

Posso formattare più istruzioni SQL?

Sì, puoi formattare più istruzioni SQL contemporaneamente. Il formattatore gestirà ogni istruzione in modo appropriato in base al dialetto selezionato.

Cosa succede se il mio SQL ha errori di sintassi?

Il formattatore tenterà di formattare il tuo SQL anche se contiene errori di sintassi. Tuttavia, potresti vedere messaggi di errore per SQL non valido che non può essere analizzato. Valida sempre il tuo SQL con il tuo sistema di database.