I database sono sistemi utilizzati per registrare, organizzare e gestire enormi quantità di dati.

Per ricercare e manipolare i dati immagazzinati, generalmente si usa un linguaggio specifico: SQL che sta per STRUCTURED QUERY LANGUAGE.

Vediamo insieme alcuni degli statement più utilizzati.

interrogazione di dati con SQL

Select

Col comando select abbiamo la possibilità di estrarre i dati, in modo mirato, dal database.

SELECT *
FROM NOME_tabella

L’asterisco dopo il Select sta a significare ‘ALL’ quindi ci aspettiamo di vedere tutte le colonne di quella tabella con i relativi valori, altrimenti l’alternativa è quella di elencare le varie colonne che ci interessa visualizzare, separandole con le virgole.

SELECT colonna1,colonna2,colonna3,colonna4,colonna5 
FROM NOME tabella

In combinazione al select abbiamo una serie di comandi utili come il DISTINCT ci permette di eliminare dai risultati le righe duplicate.

La clausola GROUP BY serve per raggruppare per righe i risultati mentre la relativa condizione HAVING serve per filtrarne i risultati.

ecco alcuni esempi:

SELECT DISTINCT COUNT(*)  
FROM utenti

In questo caso stiamo richiedendo di contare tutte le colonne della tabella utenti, ma senza righe duplicate (DISTINCT).

 SELECT nomi_clienti, sum(importo_ordine) 
 FROM ordini
 GROUP BY nomi_clienti
 HAVING sum(importo_ordine)>400
 LIMIT 10

in questo caso stiamo scegliendo di visualizzare le colonne dei nomi_clienti e della somma della colonna importo_ordine (sum) dalla tabella ordini Raggruppate per nomi_clienti e che hanno la somma maggiore di 400.
con la clausola LIMIT vogliamo vedere solo i primi 10 risultati.

 SELECT nome, cognome, citta
 FROM persone
 WHERE anni > = 18
 ORDER BY cognome DESC

in quest’altro caso selezionando tutte le persone maggiorenni, utilizzando la clausola WHERE per porre una condizione e vogliamo i risultati ordinati per cognome. la clausola DESC implica che l’ordine in cui verrà visualizzato è discendente, quindi in questo caso essendo alfabetico dalla Z alla A.

Joins

Una forma di select composto tra più tabelle con uno o più campi comuni si ottiene attraverso la clausola Join.
ci son diverse tipologie di Join in base a che tipo di info voglio ottenere.

con le Joins vado a combinare informazioni di diverse tabelle che hanno una colonna in comune che stabilisce la relazione tra quelle tabelle. 

  • (INNER) JOIN: ritorna i record con i valori che troviamo in entrambe le tabelle.
  • LEFT (OUTER) JOIN: ritorna tutti i record della tabella 1 e quelli in comune con la tabella 2.
  • RIGHT (OUTER) JOIN: ritorna tutti i record della tabella 2 e quelli in comune con la tabella 1.
  • FULL (OUTER) JOIN: ritorna tutti i valori presenti nelle due tabelle, se in una o nell’altra non ci sono valori in comune metterà null.
SQL FULL OUTER JOIN
SQL RIGHT JOIN
SQL LEFT JOIN
SQL INNER JOIN


esempio di Inner Join:

SELECT * FROM table_A
INNER JOIN table_B
ON  A.column_match = B.column_match

in questo caso stiamo unendo due tabelle, sulla base di una colonna che hanno in comune con gli stessi valori.

Subquery

Le subquery possono essere inserite ovunque il linguaggio SQL ammetta un’espressione che restituisce un singolo valore e nella clausola FROM.

Le subquery propriamente dette possono restituire un singolo valore, oppure un insieme di risultati, a seconda dei casi. Un esempio piuttosto semplice è quello in cui si vogliono estrarre da una tabella i valori numerici superiori alla media. Una sola Select non può leggere la media e al contempo i valori che la superano. A questo scopo si avrà una select che legge la media:

SELECT AVG(campo1) FROM tabella1;

Questa query verrà inserita nella clausola WHERE della query più esterna; la subquery viene eseguita per prima:

SELECT * FROM mia_tabella 
WHERE campo1 > (SELECT AVG(campo1) FROM mia_tabella);

Come si vede, da un punto di vista sintattico è necessario porre le subquery tra parentesi.

Manipolazione dei dati con SQL

Abbiamo visto che tramite l’SQL non solo abbiamo la possibilità di interrogare dei dati e di visualizzarli, ma anche di manipolarli, quindi abbiamo a disposizione anche una serie di comandi per inserire, modificare ed eliminare i dati all’interno delle tabelle di un database.

Insert

Il comando ha la funzione di inserire i dati nelle tabelle.

Le colonne (o campi) di destinazione dei valori possono essere o meno dichiarate nel comando. Se non vengono dichiarate, è necessario passare al comando un valore per ogni colonna della tabella, rispettando rigorosamente l’ordine delle colonne stesse. Se, invece, le colonne di destinazione vengono dichiarate, è possibile indicare le sole colonne per le quali vengono passati dei valori, purché vengano inseriti comunque i valori per tutte le colonne not null (che non possono essere nulle) della tabella.

Di per sé il comando insert opera inserendo in tabella una sola riga per volta.

INSERT INTO nome_tabella
VALUES (elenco valori in ordine di colonne);

Update

Il comando update ha la triplice funzione di modificare i dati delle tabelle.

Il nome di ogni campo che deve essere modificato va dichiarato dopo la parola chiave SET e deve essere seguito dal simbolo = (uguale) e dal nuovo valore che deve assumere.

È possibile modificare più campi della stessa riga in un unico comando update, separandoli l’uno dall’altro con il simbolo , (virgola).

Il comando generico aggiorna tutte le righe della tabella. È possibile restringerne il numero applicando la parola chiave aggiuntiva WHERE, che permette di effettuare una selezione qualitativa delle righe imponendo delle condizioni sui dati presenti nelle righe prima dell’aggiornamento.

UPDATE nome_tabella
SET nome_campo1 = 'valore1_nuovo',
    nome_campo2 = 'valore2_nuovo',
     ...
;

Delete

Il comando delete ha la funzione di cancellare i dati dalle tabelle.

Come il comando update anche delete può operare in modo generico cancellando tutte le righe della tabella oppure può identificare le righe da cancellare mediante la parola chiave aggiuntiva WHERE e la condizione (o le condizioni) ad essa associata.

DELETE FROM nome_tabella
WHERE nome_campo = 'valore';

Quelli visti fino ad ora sono gli Statement principali dell’SQL per manipolare e interrogare i dati: ora utilizzando questi semplici comandi sarete in grado di iniziare a lavorare sui database.