Vai al contenuto
eLearner.app
Modulo 8 · Lezione 1 di 429/57 nel corso~10 min
Lezioni del modulo (1/4)

Inserire dati: INSERT

Finora hai letto i dati. È il momento di scriverli. INSERT è il comando per aggiungere nuove righe a una tabella.

La sintassi base

SQL
INSERT INTO tabella (col1, col2, …)
VALUES (val1, val2, …);

Esempio sul nostro dataset:

SQL
INSERT INTO customers (first_name, last_name, email, city, country, signed_up_on)
VALUES ('Marco', 'Bianchi', 'marco.bianchi@example.com', 'Verona', 'Italia', '2025-07-15');

Nominare le colonne è la pratica raccomandata: rende la query robusta a futuri cambi di schema (es. una nuova colonna phone opzionale non rompe nulla) e auto-documentante.

INSERT multiplo

Una sola istruzione, più righe — molto più veloce di N INSERT separati:

SQL
INSERT INTO categories (name, parent_id) VALUES
  ('Gaming',         1),
  ('Smart Home',     1),
  ('Cucina vegana',  8);

RETURNING: leggere i valori appena inseriti

Una clausola caratteristica di PostgreSQL: RETURNING restituisce le righe appena create. Comodissimo per recuperare l'id auto-generato:

SQL
INSERT INTO categories (name, parent_id)
VALUES ('Gaming', 1)
RETURNING id, name;

L'output è una tabella di una riga con id (assegnato dal SERIAL) e name.

Cosa succede se manca una colonna

Se ometti una colonna nell'INSERT:

  • se è NOT NULL senza DEFAULT → errore;
  • se ha un DEFAULT (incluso SERIAL per id) → viene usato;
  • se accetta NULL → diventa NULL.
SQL
-- Va bene: id è SERIAL (auto), country ha NOT NULL ma forniamo tutti i campi
INSERT INTO customers (first_name, last_name, email, city, country, signed_up_on)
VALUES ('Olivia', 'Marini', 'olivia.marini@example.com', 'Bari', 'Italia', '2025-07-20');

-- Errore: first_name è NOT NULL e non è fornito
INSERT INTO customers (last_name, email, city, country, signed_up_on)
VALUES ('Marini', 'olivia.marini@example.com', 'Bari', 'Italia', '2025-07-20');

Prova tu

Esercizio#sql.m8.l1.e1
Tentativi: 0Caricamento…

Inserisci nella tabella customers un nuovo cliente con first_name 'Marco', last_name 'Bianchi', email 'marco.bianchi@example.com', city 'Verona', country 'Italia' e signed_up_on '2025-07-15'. Nomina esplicitamente tutte le colonne.

Caricamento editor…
Mostra suggerimento

L'ordine dei valori in VALUES deve corrispondere all'ordine delle colonne nominate.

Soluzione disponibile dopo 3 tentativi

Esercizio di ripasso

Esercizio#sql.m8.l1.e2
Tentativi: 0Caricamento…

Inserisci una nuova categoria 'Gaming' come figlia di 'Elettronica' (id = 1). Usa la clausola RETURNING per restituire id e name della categoria appena creata.

Caricamento editor…
Mostra suggerimento

RETURNING accetta un elenco di colonne (o '*') esattamente come una SELECT.

Soluzione disponibile dopo 3 tentativi