La parte dell’SQL che determina la gestione dei dati del database viene chiamata SQL DML, dove DML sta per Data Manipulation Language. I comandi che fanno parte di questo ambito di programmazione SQL sono SELECT, INSERT, UPDATE e DELETE che servono, rispettivamente, ad effettuare la ricerca dei dati, l’inserimento dei dati, la modifica e la cancellazione dei dati.
Diamo uno sguardo a tutti e quattro in sequenza.
Il comando SELECT
Si tratta del comando più complesso e ricco di opzioni dell’SQL DML, in quanto le ricerche possono essere filtrate in svariati modi, facendo utilizzo di decine di differenti funzioni, clausole e comandi, i quali saranno oggetto dei successivi capitoli di questa sezione.
La sintassi base per effettuare la ricerca di dati da una tabella è la seguente
SELECT * FROM nome_tabella
dove il carattere “asterisco” (*) rappresenta “tutti i campi della tabella”.
Prendiamo come tabella di esempio quella creata nello scorso articolo in cui abbiamo discusso l’SQL DDL, ovvero la tabella “utenti”, composta dai campi “id” (Contatore), “nome” e “cognome” (Testo) ed abbiamo aggiunto il campo “email” (Testo) attraverso il comando di modifica strutturale della tabella, ma per semplicità non lo prenderemo in considerazione.
Selezioniamo tutti i campi dalla tabella “utenti”
SELECT * FROM utenti
Selezioniamo solo il campo “nome”
SELECT nome FROM utenti
Selezioniamo i campi “nome” e “cognome”
SELECT nome, cognome FROM utenti
Non abbiamo ancora popolato la tabella perchè non abbiamo studiato ancora l’istruzione INSERT (Rif. paragrafo successivo) ma supponiamo che ce ne siano già e siano i seguenti
id | nome | cognome ------------------------------ 1 | Luca | Ruggiero 2 | Max | Bossi 3 | Claudio | Garau
Selezioniamo solo il record in cui il campo “id” vale 1
SELECT * FROM utenti WHERE id = 1
Selezioniamo solo il record in cui il campo “cognome” è Ruggiero
SELECT * FROM utenti WHERE cognome = 'Ruggiero'
Usiamo la clausola WHERE. Nel primo esempio il valore di riferimento è numerico, quindi si indica in maniera semplice
... id = 1
mentre nel secondo esempio il campi di riferimento è testuale, quindi il valore va incluso tra singoli apici
... cognome = 'Ruggiero'
Possiamo utilizzare diversi parametri di ricerca oltre alla clausola WHERE come gli operatori AND ed OR che, rispettivamente, si assicurano che tutte le condizioni, oppure almeno una, si verifichino al fine di filtrare i dati. Vedremo esempi pratici negli articoli a seguire.
Ordiniamo adesso una query in funzione del campo “cognome” in maniera ascendente, utilizzando il comando ORDER BY e la clausola ASC
SELECT * FROM utenti ORDER BY cognome ASC
Il risultato sarà
id | nome | cognome ------------------------------ 2 | Max | Bossi 3 | Claudio | Garau 1 | Luca | Ruggiero
Compiamo l’operazione inversa: ordiniamo con ORDER BY il risultato in maniera discendente con la clausola DESC
SELECT * FROM utenti ORDER BY cognome DESC
Il risultato sarà
id | nome | cognome ------------------------------ 1 | Luca | Ruggiero 3 | Claudio | Garau 2 | Max | Bossi
Il valore di default, se omesso, è ASC, ma è bene specificarlo perchè potrebbe non rispondere sempre a dovere.
Affronteremo i singoli casi di studio delle ricerche in articoli dedicati, prevalentemente in questa sezione ma, occasionalmente, anche in altre.
Il comando INSERT
La sintassi per effettuare un inserimento dati in una tabella è la seguente
INSERT INTO nome_tabella (nome_campo) VALUES ('valore')
Facciamo un esempio pratico di inserimento dei dati nella tabella “utenti”
INSERT INTO utenti (nome, cognome) VALUES ('Luca', 'Ruggiero')
Il campo “id” di tipo Contatore, come già detto, si incrementa da se, quindi non va mensionato. Anche in questo caso vige la regola della differenza tra il tipo di dato numerico e testuale: se ho un campo di tipo testuale, non includo il valore tra singoli apici.
Vedremo alcuni esempi di inserimento dei dati attraverso l’utilizzo del comando INSERT, ma utilizzeremo un’altra strada che per adesso non vi anticipo.
Il comando UPDATE
La sintassi per effettuare un aggiornamento dei dati in una tabella è la seguente
UPDATE nome_tabella SET nome_campo = 'nuovo_valore'
In questo modo aggiorniamo tutti i record di una tabella, ma per logica se ne aggiorna uno solo per volta. Utilizzeremo quindi la clausola WHERE
UPDATE nome_tabella SET nome_campo = 'nuovo_valore' WHERE nome_campo = 'vecchio_valore'
Facciamo un esempio pratico aggiornando il secondo record della tabella “utenti”
UPDATE utenti SET nome = 'Massimiliano' WHERE id = 1
ottenendo che “Max Bossi” diventerà “Massimiliano Bossi”.
Il comando DELETE
La sintassi per effettuare la cancellazione dei dati in una tabella è la seguente
DELETE * FROM nome_tabella
su MS Access, e
DELETE FROM nome_tabella
su tutti gli altri DBMS. In questo modo, tuttavia, cancelliamo l’intero contenuto della tabella. Dobbiamo quindi filtrare l’operazione con la clausola WHERE. Facciamo un esempio di cancellazione di un record dalla tabella “utenti”
DELETE * FROM utenti WHERE id = 1
