In questa guida vedremo come scrivere in SQL in modo corretto e sicuro query di insert, update e delete per aggiornare un database Sql Server. Molto spesso queste operazioni risultano particolarmente delicate in quanto, a differenza di una semplice select, un errore nella loro scrittura potrebbe creare gravi problemi al database sottostante. Diventa dunque necessario avere una guida per procedere in modo sicuro e controllato. L’idea di base è quella di seguire sempre questo paradigma:
- scrivere inizialmente una query che interroga il database (tramite una select);
- modificarla con pochi e semplici passi in una query che lo aggiorna (tramite una delete, insert, update).
Cancellare righe da una tabella con delete
Se vogliamo cancellare delle righe da una tabella, dobbiamo preliminarmente scrivere la query di interrogazione (tramite una select) che le visualizzi. Questa passo è imprescindibile: scrivendo direttamente la delete non avremmo modo di controllare quello che andiamo a cancellare definitivamente dal database. Se ad esempio vogliamo cancellare i clienti del Piemonte, possiamo procedere così:
1. scriviamo la query d’interrogazione
SELECT *
FROM Clienti
WHERE Regione = 'Piemonte';
2. controlliamo il risultato;
3. sostituiamo la riga contenente “SELECT *” con una riga contenente l’istruzione “DELETE”. La query di cancellazione sarà dunque
DELETE
FROM Clienti
WHERE Regione = 'Piemonte';
Inserire righe in una tabella
Anche in questo caso, dobbiamo preliminarmente scrivere la query di interrogazione (tramite una select) che visualizzi le righe che vogliamo inserire. Scrivendo direttamente la insert, infatti, non avremmo modo di controllare quello che andiamo a scrivere definitivamente nel database.
Se ad esempio vogliamo inserire nella tabella Clienti una riga con questi dati:
NumeroCliente: 11
Nome: Nicola
Cognome: Iantomasi
DataNascita: 17/10/1990
RegioneResidenza: Piemonte
possiamo procediamo in questo modo:
1.scriviamo la query con la SELECT
SELECT
11 AS NumeroCliente,
'Nicola' AS Nome,
'Iantomasi' AS Cognome,
'19901017' AS DataNascita,
'Piemonte' AS RegioneResidenza;
2. controlliamo il risultato;
3. aggiungiamo in alto una riga contenente INSERT INTO più il nome della tabella, più l’elenco delle colonne tra parentesi:
INSERT INTO Clienti(
NumeroCliente, Nome, Cognome,
DataNascita, RegioneResidenza)
SELECT
11 AS NumeroCliente,
'Nicola' AS Nome,
'Iantomasi' AS Cognome,
'19901017' AS DataNascita,
'Piemonte' AS RegioneResidenza;
Ecco alcuni ulteriori suggerimenti:
- dopo la INSERT possiamo scrivere anche query più complesse, contenenti ad esempio le clausole FROM e WHERE, per acquisire da un’altra tabella i dati da inserire;
- occorre fare massima attenzione all’ordine delle colonne e ai relativi tipi;
- fare attenzione alla presenza di colonne con la proprietà identity;
- possiamo utilizzare una sintassi equivalente che utilizza la keyword VALUES (come descritto a questo link https://docs.microsoft.com/it-it/sql/t-sql/queries/table-value-constructor-transact-sql?view=sql-server-ver15).
Modificare i dati in una tabella con update
A costo di essere ripetitivi, ripetiamo il solito paradigma: preliminarmente scriviamo una query di interrogazione (tramite una select) che visualizzi i vecchi e i nuovi valori, altrimenti non avremmo modo di controllare quello che andiamo a sovrascrivere definitivamente nel database. Ecco un esempio: modifichiamo nella tabella dei Clienti la regione di residenza del cliente numero 1.
1. Scriviamo la query d’interrogazione
SELECT *,
RegioneResidenza,
'Lombardia'
AS RegioneResidenzaNew
FROM Clienti
WHERE NumeroCliente = 1;
2. controlliamo il risultato, facendo attenzione anche al numero di righe restituite;
3. modifichiamo la query precedente in questo modo:
3.1) spostiamo in alto la FROM
FROM Clienti
SELECT *,
RegioneResidenza,
'Lombardia'
AS RegioneResidenzaNew
WHERE NumeroCliente = 1;
3.2) trasformiamo la FROM in UPDATE
UPDATE Clienti
SELECT *,
RegioneResidenza,
'Lombardia'
AS RegioneResidenzaNew
WHERE NumeroCliente = 1;
3.3) trasformiamo la SELECT in SET
UPDATE Clienti
SET *,
RegioneResidenza,
'Lombardia'
AS RegioneResidenzaNew
WHERE NumeroCliente=1;
3.4) riportiamo dopo SET la colonna che si vuole modificare e il nuovo valore
UPDATE Clienti
SET RegioneResidenza = 'Lombardia'
WHERE NumeroCliente = 1;
Anche in questo caso aggiungiamo qualche suggerimento:
- se vogliamo aggiornare più colonne, basta separarle da una virgola:
UPDATE Clienti SET RegioneResidenza = 'Lombardia', Nome = 'Nicola' WHERE NumeroCliente = 1;
- a destra dell’uguale possiamo utilizzare un’altra colonna della tabella o una funzione;
- fare sempre massima attenzione a selezionare anche la clausola WHERE;
- nel caso occorra modificare un valore con un dato proveniente da un’altra tabella, occorrerà scrivere un update con Join
UPDATE C
SET C.Nome = A.Nome
FROM Clienti AS C
INNER JOIN Archivio AS A
ON C.IdCliente = A.IdCliente
WHERE C.IdCliente = 1;
Continua a imparare
- Segui la lezione successiva sull’approfondimento dell’istruzione UPDATE
- Torna all’indice delle lezioni
- Visita la pagina del mio videocorso SQL