Torna all'elenco degli articoli Articoli
Tempo di lettura: 10 minuti

SQL INSERT, SQL UPDATE, SQL DELETE - Oh My!

Avete bisogno di capire SQL INSERT, UPDATE o DELETE? Vi aiuteremo a capire meglio con una guida completa ed esempi utili!

SQL INSERIMENTO, AGGIORNAMENTO o CANCELLAZIONE

Le istruzioni SQL INSERT, UPDATE e DELETE: di cosa si tratta? Se siete ingegneri dei dati, amministratori di database o anche solo degli appassionati, un giorno vi ritroverete con un database che diventerà il vostro "bambino". Incaricatevi di questo speciale fagottino di gioia, dovrete nutrirlo e cambiarlo. Sì, stiamo ancora parlando di database! INSERT UPDATE e DELETE sono tutte funzioni di SQL che aiutano a garantire che i dati siano aggiornati, chiari e privi di informazioni inutili o obsolete.

INSERT UPDATE, e DELETE, così come SELECT e MERGE, sono note come istruzioni del Data Manipulation Language (DML), che consentono agli utenti di SQL di visualizzare e gestire i dati. Sebbene i dati siano spesso aggiornati dall'applicazione stessa, essi richiedono regolarmente l'inserimento o la manutenzione manuale, il che richiede non solo una buona comprensione di SQL Basic (questo articolo presuppone che abbiate una conoscenza di base di SQL - se non l'avete già fatto, consultate il nostro corso SQL Basics e la nostra gamma di articoli su SQL), ma anche di INSERT, UPDATE, e DELETE e in SQL.

Questo articolo offre le basi di SQL INSERT, SQL UPDATE, e SQL DELETE, ma se volete un tutorial più completo, date un'occhiata al nostro corso How to INSERT, UPDATE, and DELETE Data in SQL. Contiene tutto ciò che serve per rendere le istruzioni DML un gioco da ragazzi.

L'ospedale pediatrico di Topolino - Un caso di studio di database

Esaminiamo queste triplette SQL una per una e capiamo come funzionano.

Utilizzeremo un database di esempio per dimostrare ognuna di esse. Restando in tema di bambini, supponiamo di essere l'amministratore dei dati di un ospedale pediatrico, per la precisione il "Mickey Mouse Children's Hospital", l'ospedale pediatrico di Topolino. L'ospedale tiene i registri di tutti i suoi piccoli pazienti, compresa l'età, il peso, i risultati degli esami del sangue... vi siete fatti un idea.

Di solito, i medici inseriscono e aggiornano queste informazioni nel sistema dell'ospedale ogni volta che visitano i loro pazienti, e gran parte dell'inserimento, dell'aggiornamento e della cancellazione dei dati nel database viene eseguita dal sistema. Ma spesso ci sono cose che devono essere sistemate manualmente e, in qualità di amministratore del database, è il vostro momento di brillare!

Nell'articolo che segue, utilizziamo tre tabelle diverse per dimostrare le tre diverse istruzioni.

La tabella di esempio numero uno mostra i record dei pazienti e le loro informazioni di base:

Tabella pazienti

PatientIDSurnameFirstNameDOBSexWeightHeightVaccinated
15223SmithDeniz12/31/2018F21.429.2Y
15224AgarwalArjun08/29/2017M28.134.2Y
15225AdamsPoppy02/14/2015F34.039.2N
15226JohnsonTierra08/15/2019F14.624.5Y
15227KhouriMohammed03/30/2014M41.544.1Y
15228JonesBen04/04/2011M70.152.2Y
15229KowalczykAlexandra08/27/2019F15.223.9Y

La tabella di esempio numero due riporta i diversi reparti dell'ospedale e i gruppi e le categorie in cui rientrano tali reparti:

Tabella dei reparti

DepartmentIDDepartmentNameGroupNameCategoryName
1CardiologyHeart CenterClinical
2Central ICUEmergencyClinical
3EmergencyEmergencyClinical
4CommunicationsAdministrationOperational
5OncologyInternal MedicineClinical
6NeurologyInternal MedicineClinical
7Human ResourcesAdministrationOperational
8PathologyServiceTechnical
9RadiologyServiceTechnical
10PharmacyServiceTechnical
11Executive BoardAdministrationOperational
12UrologySurgeryClinical
13HematologyInternal MedicineClinical
14Montana WardWardOperational
15Chicago WardWardOperational
16Lincoln WardWardOperational
17Yellowstone WardWardOperational
18Brooklyn WardWardOperational

La tabella di esempio numero tre registra le visite dei pazienti nel corso degli anni:

Tabella Ammissione Pazienti

PatientIDLastAdmittedLastDischarged
3312/29/195201/05/1953
34--
3508/01/200408/04/2004
3607/28/201107/30/2011
3705/27/195005/30/1950
38--
3910/11/197010/20/1970

Armati di queste tabelle di esempio, entriamo nel vivo di INSERT, UPDATE e DELETE.

INSERIMENTO dei dati con SQL

Proprio come i bambini, ogni minuto nascono nuovi dati. Con molti sistemi efficienti, spesso questi dati vengono aggiunti senza problemi ai database a cui sono destinati. In molti casi, però, è necessario aggiungerli manualmente, ed è qui che entra in gioco l'istruzione INSERT di SQL.

INSERT è la soluzione per aggiungere righe singole o multiple a una tabella. INSERT può anche servire in caso di dover aggiungere righe da una tabella a un'altra.

Vediamo la struttura di base di un'istruzione SQL INSERT:

INSERT INTO tableName
(column1, column2, ...)
VALUES (value1, value2, ...)

Innanzitutto, è necessario identificare la tabella in cui si desidera inserire le righe. Quindi, si specificano le colonne che si desidera riempire. Infine, si stabiliscono i valori da aggiungere. Questa è la forma base della funzione INSERT ed è piuttosto intuitiva.

Per dare a questa struttura un'applicazione reale, ecco un esempio tratto dal nostro caso di studio.

Uno dei medici dell'ospedale pediatrico di Topolino ha un paziente appena nato a cui non è ancora stato dato un nome. Il medico ha bisogno di inserire immediatamente il bambino nel database per poter accedere a una sperimentazione farmacologica per il bambino malato, ma il sistema non permette di inviare il file del piccolo senza un nome. Il medico vuole che il paziente venga inserito con il suo numero di paziente, lasciando il nome in bianco per il momento. L'amministratore deve inserire manualmente il paziente nel database.

Ecco come apparirebbe l'istruzione INSERT:

INSERT INTO dbo.Patient
            (Surname, FirstName, DOB, Sex, [Weight], Height, Vaccinated)
VALUES      (NULL, NULL,'2019-11-19', 'F', 14.0, 23.1, 'No')

Come si può notare, non solo si indica il nome della tabella da inserire, ma anche i nomi delle colonne e dei valori che si vogliono aggiungere. Non specifichiamo Patient ID nell'elenco delle colonne perché, essendo una colonna di identità, viene popolata automaticamente.

Poiché per ora vogliamo mantenere il nome del paziente vuoto, scriviamo NULL per le colonne nome.

Una volta eseguito il comando, verrà creata la seguente aggiunta al database:

Inserire dati con SQL

Inserimento di più righe

Per inserire più righe di dati con una sola istruzione, utilizzate parentesi e virgole per specificare le diverse righe nuove.

INSERT INTO dbo.Patient
            (Surname, FirstName, DOB, Sex, [Weight], Height, Vaccinated)
VALUES      ('Hitson', 'George','2019-11-19', 'M', 13.9, 22.5, 'No'),
VALUES      ('Hitson', 'Jenny','2019-11-19', 'F', 13.7, 22.3, 'No')

Suggerimento! Usare una transazione per provare l'inserimento senza eseguire il commit e modificare in modo permanente la tabella. A tale scopo, iniziate con BEGIN TRANSACTION e terminate la transazione con COMMIT, se si desidera mantenere le modifiche, o ROLLBACK, se si desidera annullare le modifiche apportate. Di seguito viene illustrato come aggiungere una transazione all'esempio precedente:

BEGIN TRANSACTION

BEGIN TRANSACTION
INSERT INTO dbo.Patient
            (Surname, FirstName, DOB, Sex, [Weight], Height, Vaccinated)
VALUES      ('Hitson', 'George','2019-11-19', 'M', 13.9, 22.5, 'No'),
	        ('Hitson', 'Jenny','2019-11-19', 'F', 13.7, 22.3, 'No')

ROLLBACK
--COMMIT

Inserimento da una tabella a un'altra

È necessario inserire una o più righe di dati da una tabella a un'altra? Potete usare l'istruzione INSERT INTO SELECT.

Supponiamo che diversi dei nostri giovani pazienti stiano partecipando a un nuovo studio farmaceutico e che si voglia creare una nuova tabella per registrare la loro partecipazione. La struttura di base di questa istruzione è:

INSERT INTO targetTable (column1, column2, ...)
SELECT      (column1, column2, ...)
FROM        sourceTable

L'istruzione per il nostro esempio di sperimentazione di un farmaco sarebbe simile a questa:

INSERT INTO [dbo].[DrugTrialAlpha]
           (Surname, FirstName, DOB, Sex, DrugOrPlacebo, Notes)
SELECT 
	p.Surname, p.FirstName, p.DOB, p.Sex, 'Drug', NULL 
FROM dbo.Patient AS p
WHERE 
	p.PatientID IN (15226, 15229, 15230)
UNION
SELECT 
	p.Surname, p.FirstName, p.DOB, p.Sex, 'Placebo', NULL 
FROM dbo.Patient AS p
WHERE 
	p.PatientID IN (15231)

Si potrebbe anche scrivere l'esempio come una Common Table Expression (CTE). Tra le varie funzioni, le CTE possono essere utilizzate per creare un insieme di risultati temporaneo che può essere riutilizzato durante la query. Ecco come apparirebbe lo stesso comando scritto come CTE:

WITH drugTrialPatients (Surname, FirstName, DOB, Sex, DrugOrPlacebo, Notes)
AS (
	SELECT 
		p.Surname, p.FirstName, p.DOB, p.Sex, 'Drug', NULL 
	FROM dbo.Patient AS p
	WHERE 
		p.PatientID IN (15226, 15229, 15230)
	UNION
	SELECT 
		p.Surname, p.FirstName, p.DOB, p.Sex, 'Placebo', NULL 
	FROM dbo.Patient AS p
	WHERE 
		p.PatientID IN (15231)
	)
INSERT INTO [dbo].[DrugTrialAlpha]
           (Surname, FirstName, DOB, Sex, DrugOrPlacebo, Notes)
SELECT Surname, FirstName, DOB, Sex, DrugOrPlacebo, Notes
FROM drugTrialPatients
Inserimento da una tabella a un'altra

Suggerimento! Se si utilizza SELECT per aggiungere dati da una tabella a un'altra, è consigliabile, come passo iniziale, eseguire l'istruzione SELECT da sola, solo per assicurarsi che vengano restituite le righe giuste e che il risultato sia soddisfacente!

AGGIORNAMENTO dei dati con SQL

L'istruzione UPDATE di SQL è un'altra operazione comunemente utilizzata dagli ingegneri dei dati e dagli amministratori di database. Si usa per modificare il valore di una colonna per una o più righe.

Ecco come è generalmente strutturata un'istruzione UPDATE di SQL:

UPDATE tableName
SET column1=value1, column2=value2,...
WHERE filterColumn=filterValue

Come per l'istruzione INSERT di SQL, per prima cosa è necessario identificare la tabella che si desidera aggiornare. Quindi si utilizza la clausola SET che specifica le colonne che si desidera aggiornare. Infine, si utilizza la clausola WHERE per individuare le righe da includere nell'aggiornamento.

Suggerimento! Poiché il valore di una nuova colonna può influenzare più di una riga, assicuratevi di essere soddisfatti dell'entità dell'aggiornamento prima di eseguire il commit! Proprio come INSERT, un UPDATE di SQL può essere scritto come una transazione, il che significa che è possibile eseguire COMMIT o ROLLBACK l'aggiornamento a seconda che si sia soddisfatti o meno delle modifiche.

Ecco un esempio basato sul nostro caso di studio. Il nostro reparto di emergenza sta cambiando nome in reparto "Trauma and Emergency Surgery", quindi il suo nome deve essere modificato nel database. Per aggiornare il nome, si può eseguire questa istruzione:

UPDATE dbo.Department
   SET DepartmentName = 'Trauma and Emergency Surgery'
WHERE DepartmentID = 3
SELECT * FROM dbo.Department WHERE DepartmentName = 'Emergency'
Aggiornare i dati con SQL

Ecco come apparirebbe il nome del reparto aggiornato nella nostra tabella:

Aggiornare i dati con SQL

Quando si utilizza l'istruzione UPDATE di SQL, assicuratevi che la clausola WHERE specifichi esattamente le righe che desiderate aggiornare. In caso di dubbio, scrivete l'istruzione come una transazione, che potrete poi annullare se non siete soddisfatti della modifica: nessun problema!

Per verificare che stiate selezionando i dati giusti da aggiornare, si può fare un test usando SELECT per assicurarsi di puntare alle righe giuste.

Aggiornamento più righe

Se è necessario aggiornare più righe di dati, è facile con l'istruzione UPDATE. In questo caso la clausola WHERE è la vostra amica.

Immaginiamo di voler ricategorizzare tutti i reparti di degenza da "Ward" a "Room" sotto la colonna group.

UPDATE dbo.Department
   SET GroupName = 'Room'
WHERE GroupName = 'Ward' 

Ciò cambierebbe la tabella che assumerebbe l'aspetto seguente:

Aggiornare più righe Aggiornare più righe

CANCELLARE i dati con SQL

Romper

SQL DELETE è il cambio di pannolino del mondo SQL. C'è qualcosa che non volete? Eliminatelo!

DELETE rimuove una o più righe da una tabella, ma fate attenzione! Dovete assicurarvi di sapere cosa state eliminando prima di eseguire il commit dell'istruzione!

Ecco come si presenta una tipica istruzione DELETE di SQL:

DELETE tableName
WHERE  filterColumn=filterValue;

Si compone di due parti: l'indicazione della tabella e l'indicazione di WHERE di quali righe si vogliono eliminare.

Se si conosce la chiave primaria della riga che si vuole eliminare, il lavoro è semplice. Si vuole eliminare il reparto ospedaliero di Lincoln dalla tabella? Basta scrivere:

DELETE FROM dbo.Department
WHERE DepartmentID = 16
Cancellare dati con SQL

Eliminazione di più righe

Torniamo all'ospedale pediatrico di Topolino. Supponiamo che il responsabile dei dati dell'ospedale voglia eliminare tutte le registrazioni dei pazienti che non hanno visitato l'ospedale dal 1969. Ecco come si potrebbe scrivere l'istruzione DELETE:

DELETE FROM dbo.PatientAdmittance 
WHERE LastDischarged < '1969-01-01' 

Il risultato? Questa è la tabella precedente...

Eliminazione di più righe

... e questo è l'aspetto dopo l'esecuzione dello script:

Eliminazione di più righe

La cosa migliore da fare prima di eseguire l'istruzione DELETE, tuttavia, sarebbe testare il risultato utilizzando SELECT. Questo restituirà tutte le righe che si stavano per eliminare, in modo da poter verificare prima se si stanno rimuovendo le righe giuste!

Per eseguire questo test, digitate:

SELECT * FROM dbo.PatientAdmittance 
WHERE LastDischarged < '1969-01-01'

Attenzione! Se si usa DELETE senza aggiungere la clausola WHERE, si cancellerà ogni riga dalla tabella.

Conclusione

Una volta acquisita la padronanza di SQL Basics, le istruzioni SQL INSERT, UPDATE e DELETE sono il vostro prossimo passo verso la gloria dei database! Se questo articolo ha stuzzicato la vostra voglia di saperne di più, date un'occhiata al nostro corso per principianti, How to INSERT, UPDATE, and DELETE Data in SQL. Non solo approfondirà queste informazioni fondamentali, ma vi insegnerà anche:

  • Come gestire i valori di riempimento automatico e come combinare i comandi di manipolazione dei dati SQL con IDENTITY, SEQUENCE e NEWID().
  • Come combinare i comandi SQL DML con NULLS.
  • Come combinare i comandi SQL DML con JOINS.
  • Come modificare i dati utilizzando i valori predefiniti delle colonne.
  • Come eseguire le operazioni CRUD, le più importanti tra le operazioni DML.

Con 52 esercizi interattivi, accesso a vita al corso, un certificato di completamento e una garanzia di rimborso di 30 giorni, c'è poco da perdere a provarlo!

Quindi, cosa state aspettando? INSERite nuove conoscenze nella vostra vita, fate un UPDATE la vostra formazione in SQL e DELETE tutte le scuse! Ci vediamo in giro per i database.