SQL Cheat Sheet: comandi e query
Ultimo aggiornamento
Interrogare i dati (SELECT)
Il cuore di SQL: leggere righe da una o più tabelle.
| Operazione | Sintassi |
|---|---|
| Selezionare tutte le colonne | SELECT * FROM users; |
| Selezionare colonne specifiche | SELECT id, name FROM users; |
| Rinominare una colonna (alias) | SELECT name AS full_name FROM users; |
| Valori distinti | SELECT DISTINCT country FROM users; |
| Limitare le righe | SELECT * FROM users LIMIT 10; |
| Saltare e poi limitare (paginazione) | SELECT * FROM users LIMIT 10 OFFSET 20; |
| Contare le righe | SELECT COUNT(*) FROM users; |
Filtrare le righe (WHERE)
Restringi le righe restituite da una query.
| Operazione | Sintassi |
|---|---|
| Uguaglianza / confronto | WHERE age >= 18 |
| Più condizioni | WHERE age >= 18 AND country = 'US' |
| Una delle due condizioni | WHERE role = 'admin' OR role = 'owner' |
| In un insieme | WHERE country IN ('US', 'CA', 'MX') |
| In un intervallo | WHERE price BETWEEN 10 AND 50 |
| Corrispondenza di pattern | WHERE email LIKE '%@gmail.com' |
| È / non è null | WHERE deleted_at IS NULL |
| Negazione | WHERE status NOT IN ('archived') |
Ordinamento e raggruppamento
| Operazione | Sintassi |
|---|---|
| Ordinare in modo crescente (predefinito) | ORDER BY created_at |
| Ordinare in modo decrescente | ORDER BY created_at DESC |
| Ordinare per più colonne | ORDER BY country, name DESC |
| Raggruppare le righe | SELECT country, COUNT(*) FROM users GROUP BY country; |
| Filtrare i gruppi | GROUP BY country HAVING COUNT(*) > 100 |
Joins
Combina righe di due tabelle in base a una colonna corrispondente.
| Tipo di join | Restituisce | Sintassi |
|---|---|---|
| INNER JOIN | Solo le righe che corrispondono in entrambe le tabelle | FROM orders o INNER JOIN users u ON o.user_id = u.id |
| LEFT JOIN | Tutte le righe di sinistra + corrispondenze (altrimenti null) | FROM users u LEFT JOIN orders o ON o.user_id = u.id |
| RIGHT JOIN | Tutte le righe di destra + corrispondenze | FROM orders o RIGHT JOIN users u ON o.user_id = u.id |
| FULL OUTER JOIN | Tutte le righe di entrambi i lati | FROM a FULL OUTER JOIN b ON a.id = b.a_id |
| CROSS JOIN | Ogni combinazione (prodotto cartesiano) | FROM sizes CROSS JOIN colors |
| Self join | Una tabella unita a se stessa | FROM employees e JOIN employees m ON e.manager_id = m.id |
Funzioni di aggregazione
Calcolano un singolo valore su un gruppo di righe.
| Funzione | Cosa fa |
|---|---|
COUNT(*) | Numero di righe |
COUNT(col) | Numero di valori non null |
SUM(col) | Totale di una colonna numerica |
AVG(col) | Valore medio |
MIN(col) / MAX(col) | Valore minimo / massimo |
STRING_AGG(col, ',') | Concatena valori (Postgres; GROUP_CONCAT in MySQL) |
Funzioni finestra
Calcolano su un insieme di righe senza ridurle a una sola.
| Funzione | Sintassi |
|---|---|
| Numero di riga | ROW_NUMBER() OVER (ORDER BY score DESC) |
| Rango (con salti) | RANK() OVER (PARTITION BY country ORDER BY score DESC) |
| Rango denso | DENSE_RANK() OVER (ORDER BY score DESC) |
| Totale progressivo | SUM(amount) OVER (ORDER BY created_at) |
| Riga precedente / successiva | LAG(score) OVER (ORDER BY date), LEAD(score) OVER (...) |
Modificare i dati (INSERT, UPDATE, DELETE)
| Operazione | Sintassi |
|---|---|
| Inserire una riga | INSERT INTO users (name, email) VALUES ('Ada', 'ada@x.com'); |
| Inserire più righe | INSERT INTO users (name) VALUES ('Ada'), ('Alan'); |
| Aggiornare righe | UPDATE users SET active = true WHERE id = 1; |
| Eliminare righe | DELETE FROM users WHERE active = false; |
| Upsert (Postgres/SQLite) | INSERT ... ON CONFLICT (email) DO UPDATE SET name = EXCLUDED.name; |
Definire le tabelle (DDL)
| Operazione | Sintassi |
|---|---|
| Creare una tabella | CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT NOT NULL); |
| Aggiungere una colonna | ALTER TABLE users ADD COLUMN age INTEGER; |
| Eliminare una colonna | ALTER TABLE users DROP COLUMN age; |
| Eliminare una tabella | DROP TABLE users; |
| Creare un indice | CREATE INDEX idx_users_email ON users (email); |
| Chiave esterna | FOREIGN KEY (user_id) REFERENCES users (id) |
Ogni istruzione, clausola e join SQL che ti serve, in una sola pagina. Questa SQL cheat sheet è un riferimento rapido per interrogare e modificare dati relazionali: le clausole SELECT, i quattro tipi di JOIN, l'aggregazione e i comandi DDL e DML che usi per creare e aggiornare le tabelle.
La sintassi è SQL ANSI standard e funziona in PostgreSQL, MySQL, SQLite e SQL Server, salvo dove indicato. Copia ciò che ti serve o prova ogni query dal vivo nel playground SQL, senza installare nessun database. Sei alle prime armi con i database? Il corso SQL interattivo e gratuito di Coddy ti guida tra query, join e aggregazioni.
Domande frequenti sulla SQL cheat sheet
Questa SQL cheat sheet è gratuita?
Funziona con MySQL, PostgreSQL e SQLite?
SELECT, WHERE, JOIN, GROUP BY e DDL mostrata qui è SQL ANSI standard e funziona allo stesso modo in MySQL, PostgreSQL, SQLite e SQL Server. Alcune funzionalità avanzate cambiano a seconda del dialetto (gli upsert e l'aggregazione di stringhe sono le più comuni) e in quelle righe la differenza è indicata.Qual è la differenza tra INNER JOIN e LEFT JOIN?
INNER JOIN restituisce solo le righe che hanno una corrispondenza in entrambe le tabelle. Un LEFT JOIN restituisce tutte le righe della tabella di sinistra (la prima), riempiendo con NULL le colonne della tabella di destra quando non c'è corrispondenza: utile quando vuoi tutti gli utenti anche se alcuni non hanno ordini.Posso esercitarmi con questi comandi SQL online?
SELECT fino ai join e alle funzioni finestra.