↓ Salta al contenuto principale
  1. Posts/

I comandi SQL essenziali

863 parole·5 minuti·

Se lavori con i database relazionali, conoscere l’SQL (Structured Query Language) è indispensabile. Ecco una lista dei comandi SQL più importanti, divisi per categoria, con qualche esempio completo alla fine.

La sintassi qui sotto è SQL standard. Dove i database principali (PostgreSQL, MySQL, SQL Server, SQLite) si comportano in modo diverso, lo trovi segnalato.

1. DDL (Data Definition Language)
#

CREATE DATABASE <nome> - crea un nuovo database

DROP DATABASE <nome> - elimina un database esistente

CREATE TABLE <tabella> (...) - crea una nuova tabella

DROP TABLE <tabella> - elimina una tabella e i suoi dati

ALTER TABLE <tabella> ADD <colonna> <tipo> - aggiunge una colonna a una tabella

TRUNCATE TABLE <tabella> - svuota una tabella mantenendone la struttura

CREATE INDEX <nome> ON <tabella> (colonna) - crea un indice per velocizzare le ricerche su una colonna

Esempio di tabelle con chiave primaria, chiave esterna e vincoli:

CREATE TABLE clienti (
    id     INT PRIMARY KEY,
    nome   VARCHAR(100) NOT NULL,
    email  VARCHAR(255) UNIQUE
);

CREATE TABLE ordini (
    id          INT PRIMARY KEY,
    cliente_id  INT NOT NULL,
    totale      DECIMAL(10, 2) CHECK (totale >= 0),
    creato_il   DATE,
    FOREIGN KEY (cliente_id) REFERENCES clienti(id)
);

2. DML (Data Manipulation Language)
#

INSERT INTO <tabella> (col1, col2) VALUES (val1, val2) - inserisce un nuovo record

UPDATE <tabella> SET col1 = val1 WHERE condizione - aggiorna i record esistenti

DELETE FROM <tabella> WHERE condizione - elimina record da una tabella

Attenzione: un UPDATE o un DELETE senza WHERE modifica tutte le righe della tabella. Prima di eseguirlo, lancia una SELECT con la stessa condizione per vedere quali righe verranno toccate.

3. DQL (Data Query Language)
#

SELECT * FROM <tabella> - seleziona tutte le colonne da una tabella

SELECT col1, col2 FROM <tabella> - seleziona colonne specifiche

SELECT DISTINCT colonna FROM <tabella> - seleziona valori univoci

SELECT * FROM <tabella> WHERE condizione - filtra i risultati (es. id = 1)

SELECT * FROM <tabella> ORDER BY colonna ASC|DESC - ordina i risultati

SELECT * FROM <tabella> LIMIT 10 - limita il numero di risultati (in SQL Server si usa SELECT TOP 10 * FROM <tabella>)

SELECT col AS alias FROM <tabella> - rinomina una colonna nel risultato

4. DCL (Data Control Language)
#

GRANT <permessi> ON <tabella> TO <utente> - assegna privilegi a un utente

REVOKE <permessi> ON <tabella> FROM <utente> - rimuove i privilegi da un utente

5. TCL (Transaction Control Language)
#

BEGIN (o START TRANSACTION) - inizia una nuova transazione

COMMIT - salva definitivamente i cambiamenti della transazione corrente

ROLLBACK - annulla i cambiamenti della transazione corrente

SAVEPOINT <nome> - imposta un punto di salvataggio all’interno di una transazione

Esempio classico: un bonifico deve aggiornare entrambi i conti, oppure nessuno dei due.

BEGIN;
UPDATE conti SET saldo = saldo - 100 WHERE id = 1;
UPDATE conti SET saldo = saldo + 100 WHERE id = 2;
COMMIT; -- in caso di errore: ROLLBACK;

6. Join (unioni tra tabelle)
#

INNER JOIN - record che hanno valori corrispondenti in entrambe le tabelle

LEFT JOIN - tutti i record della tabella di sinistra e i corrispondenti della tabella di destra

RIGHT JOIN - tutti i record della tabella di destra e i corrispondenti della tabella di sinistra

FULL JOIN - tutti i record di entrambe le tabelle, abbinati dove possibile (non supportato da MySQL)

-- Tutti i clienti con i loro ordini, compresi i clienti che non hanno ancora ordinato
SELECT c.nome, o.id AS ordine, o.totale
FROM clienti c
LEFT JOIN ordini o ON o.cliente_id = c.id
ORDER BY c.nome;

7. Funzioni di aggregazione e raggruppamento
#

COUNT(colonna) - conta le righe con un valore non NULL (COUNT(*) conta tutte le righe)

SUM(colonna) - calcola la somma dei valori

AVG(colonna) - calcola la media dei valori

MIN(colonna) / MAX(colonna) - trova il valore minimo / massimo

GROUP BY colonna - raggruppa le righe con lo stesso valore

HAVING condizione - filtra i gruppi creati (simile a WHERE, ma dopo il GROUP BY)

-- Clienti che hanno speso più di 500 €, dal migliore al peggiore
SELECT c.nome, COUNT(*) AS num_ordini, SUM(o.totale) AS speso
FROM clienti c
JOIN ordini o ON o.cliente_id = c.id
GROUP BY c.id, c.nome -- c.id evita di unire due clienti omonimi
HAVING SUM(o.totale) > 500
ORDER BY speso DESC;

Ordine logico di esecuzione: FROM → JOIN → WHERE → GROUP BY → HAVING → SELECT → ORDER BY → LIMIT. Ecco perché in molti database non puoi usare un alias del SELECT dentro il WHERE.

8. Operatori logici e di confronto
#

=, <>, !=, <, >, <=, >= - operatori di confronto (<> è lo standard, != è molto diffuso)

AND, OR, NOT - operatori logici per combinare condizioni

BETWEEN val1 AND val2 - verifica se un valore è compreso in un intervallo (estremi inclusi)

LIKE 'pattern' - cerca un pattern: % = qualsiasi sequenza di caratteri, _ = un solo carattere (es. '%test%')

IN (val1, val2, ...) - verifica se un valore è in una lista

IS NULL / IS NOT NULL - verifica se un valore è o non è NULL (= NULL non funziona mai!)


Saper padroneggiare questi comandi ti permetterà di interrogare e gestire in modo efficace qualsiasi database relazionale!

Ashif C.
Autore
Ashif C.
Sono un Edge Developer e tech enthusiast che sta imparando a costruire applicazioni moderne su infrastrutture distribuite, con un focus su performance, serverless ed esperienza sviluppatore. Nel tempo libero mi diverto facendo diversi esperimenti con ESP32.

Articoli correlati