Sei sulla pagina 1di 9

SQL

01 Il Linguaggio dei Database.......................1 08 Aggregate Functions.................................4


02 SQL lavora su Insiemi di Dati...................1 01 L’Aggregate Function più semplice......4
03 Da dove vengono i dati?............................1 02 Funzione Aggregate & Joins.................5
04 Con quali Informazioni si lavorerà?..........2 03 Funzioni SQL di Aggregazione............6
05 Con quale Set di Records si Lavora?........2 04 Esempi di Funzione di Aggregazione...6
06 Combinare le Informazioni da Tabelle 09 DDL & DML............................................7
Multiple......................................................3
07 Organizzare i Risultati..............................4

01 Il Linguaggio dei Database


Per apprendere un qualsiasi linguaggio è necessario strutturare un percorso di apprendimento e la
descrizione delle sue regole.
Possedere un valido vocabolario e le regole della grammatica diventa un valido aiuto per la
conoscenza di una qualsiasi lingua straniera.
Lo stesso vale per i linguaggi di programmazione.

SQL è l’acronimo di: Structured Query Language.


Considereremo la sintassi base e la grammatica che ci permetteranno di creare delle query SQL.
Questa parte sarà tenuta ad alto livello, senza addentrarsi sui dettagli delle regole e sintassi.
Verranno spiegati gli aspetti più importanti e generali del SQL – concetti e punti critici su cui far
attenzione.

02 SQL lavora su Insiemi di Dati (Sets of Records)


In SQL i records sono le righe di una tabella.
SQL è strutturato per lavorare con diversi records in contemporanea.
Tipicamente SQL è utilizzato per ritornarne dei dati e produrre un report.
Data una query, SQL ritornerà tutti i dati (records) richiesti.

SQL può fare molto più che semplici reports, ma bisogna porre sempre attenzione sul set di record
ritornati da ogni query – un set vuoto, un singolo record o molti records.

03 Da dove vengono i dati?


Un passaggio importante nel linguaggio SQL è il comprendere ed identificare la sorgente del dato.
Da dove provengono le informazioni con cui vogliamo lavorare?
Si identifica e seleziona, pertanto, la tabella desiderata specificandone il nome con la clausola
FROM.
Quali dati cerchiamo?
Da dove è meglio prenderli?
Abbiamo il nome corretto della tabella?
La tabella è la fonte più aggiornata del dato?
Sono tutti quesiti che possono esser risposti cercando tra le tabelle di sistema (System Tables –
sys.tables, ecc… a seconda del database).
Esempio di comando utilizzato per visualizzare le tabelle:

SHOW TABLES
04 Con quali Informazioni si lavorerà?
Quale tipologia di informazioni si vogliono considerare per ogni Record?
In SQL le colonne di una tabella sono chiamate Attributi.
Quando si lavora con una tabella in particolare, bisogna identificare gli attributi da evidenziare
attraverso il comando SELECT.
La seguente query ritorna tutti gli attributi (colonne) di una tabella chiamata Student:
SELECT * FROM student

Questa query tornerà tutti i records dalla tabella e mostrerà tutte le colonne.

05 Con quale Set di Records si Lavora?


Le tabelle possono contenere centinaia, migliaia o anche milioni di records.
Ovviamente di tale set di records solo una parte conterrà l’informazione cercata.
Per poter restringere l’insieme di dati cercati verrà utilizzata la clausala WHERE.

La clausa WHERE permette di specificare un’espressione logica per filtrare i records.


SQL ritornerà tutti i records dei quali dati combaciano con le condizioni volute.
Si possono usare degli operatori logici standard (=, >, <, <>) o anche delle espressioni più
complesse attraverso operatori quali: BETWEEN ,  AND ,  OR , e  NOT.
Esiste una vasta gamma di funzioni aritmetiche a disposizione, che possono agire su una o più
tabelle.
Esempio:

SELECT name, room_id FROM student WHERE name LIKE 'J%'

Questa espressione permette di selezionare dalla tabella Student, le colonne name e room_id, per
tutti i records che contengono, per la colonna name, un testo che inizi con la lettera J.
06 Combinare le Informazioni da Tabelle Multiple
Si può lavorare in SQL con più tabelle attraverso i comandi JOINs :  JOIN /LEFT/RIGHT.

Chi amministra un database preferisce mantenere le informazioni pulite  Normalizzazione.


Se per esempio si gestisce una lista d’impiegati, si preferisce registrare ogni nome unico una sola
volta.
Se si verifica un errore o un nome cambia, si preferisce che la correzione o la modifica sia da fare
una sola volta, e non in diversi records su tabelle differenti.
Vi sarà, pertanto, una tabella specifica con le informazioni di profilazione di tutti gli impiegati, ma,
d’altra parte, vi saranno tabelle specifiche contenenti le informazioni relative ad altri fatti correlati
a tali records;
esempio possiamo avere una lista degli ordini fatti da ogni impiegato, o la lista delle telefonate
fatte da ognuno.
Questo implica che se si è interessati a diverse informazioni inerenti gli impiegati, sarà necessario
acquisirle da più tabelle diverse attraverso delle JOIN.

Ci sono tre tipologie di Join: INNER ,  LEFT ,  RIGHT , e solitamente vengono utilizzati FULL.
INNER  e  LEFT joins sono molto comuni inoltre.
Una Inner Join prende due tabelle e ritorna soltanto i records che combaciano con determinate
condizioni per entrambe – intersezione.
Una Left Join ritorna tutti i records dei valori specificati sulla parte sinistra dell’equazione e
soltanto i records combacianti del data set sulla parte destra dell’equazione.
L’opposto ovviamente per la Right Join.
Una Full Join ritornerà il prodotto cartesiano dei records, e Nulls laddove non vi sono Matches
nella combinazione.
Esempio di Inner Join:

SELECT r.room_number, e.name


FROM equipment AS e
INNER JOIN room AS r
ON e.room_id = r.id;

Il commando SQL UNION permette di combinare il risultato di due comandi SELECT in maniera
simile ad una FULL JOIN.

07 Organizzare i Risultati
Per poter organizzare i dati di una tabella è necessario il comando ORDER BY – ordinare i records
per i valori nella colonna specificata.
L’ordinamento di default è ASC –> Ascending. Specificando DESC  Descending si otterrà
l’opposto.
Esempio:

SELECT r.room_number, e.name


FROM equipment AS e
INNER JOIN room AS r
ON e.room_id = r.id
ORDER BY r.room_number ASC
08 Aggregate Functions
01 L’Aggregate Function più semplice
Per il caso a seguire abbiamo come esempio due tabelle:

SELECT *
FROM [Corso].[dbo].[Country];

SELECT *
FROM [Corso].[dbo].[City];

Eseguiamo ora un conteggio delle tabelle:


SELECT Count(*) as Number_Countries
FROM [Corso].[dbo].[Country];

SELECT Count(*) as Number_Cities


FROM [Corso].[dbo].[City];

Questa è la forma più semplice di aggregazione possibile. La funzione Count non fa altro che
contare tutti i records presenti nella tabella selezionata. L’asterisco è ad indicare di selezionare
tutte le colonne presenti in ogni record, ma è ovviamente una dicitura opzionale in quanto l’utente
può limitarsi ad indicare anche una sola colonna.
02 Funzione Aggregate & Joins
Proviamo ora ad utilizzare la funzione Count in un contesto di due tabelle associate:

SELECT *
FROM [Corso].[dbo].[Country]
Inner Join [Corso].[dbo].[City]
on City.Country_Id = Country.Id

SELECT Count(*) as Row_Num


FROM [Corso].[dbo].[Country]
Inner Join [Corso].[dbo].[City]
on City.Country_Id = Country.Id

In questo caso abbiamo combinato le due tabelle attraverso un Inner Join.


Successivamente abbiamo contato le righe della tabella risultante.

Proviamo ora a fare lo stesso utilizzando una Left Join:

SELECT *
FROM [Corso].[dbo].[Country]
Left Join [Corso].[dbo].[City]
on City.Country_Id = Country.Id

SELECT Count(*) as Row_Num


FROM [Corso].[dbo].[Country]
Left Join [Corso].[dbo].[City]
on City.Country_Id = Country.Id

SELECT Count(Country.country_name) as Cnt_Contries, Count(City.City_Name) as Cnt_Cities


FROM [Corso].[dbo].[Country]
Left Join [Corso].[dbo].[City]
on City.Country_Id = Country.Id

Possiamo notare:
1. Abbiamo un totale di 8 righe in quanto sono presenti anche quelle sulla tabella a sinistra
(Country) le quali non hanno correlazione con la tabella a destra (City).
2. La seconda query conta le righe presenti nella tabella risultante finale
3. La terza query offre un maggiore livello di dettaglio. I valori vuoti non vengono contati.
03 Funzioni SQL di Aggregazione
Abbiamo diverse funzioni di aggregazione:
 COUNT: conta il numero di elementi di un gruppo definito
 SUM: calcola la somma di un dato attributo/espressione nel gruppo definito
 AVG: calcola la media di un dato attributo/espressione nel gruppo definito
 MIN: trova il minimo di un gruppo definito
 MAX: trova il massimo di un gruppo definito

Altre possibili funzioni:

 APPROX_COUNT_DISTINCT
 CHECKSUM_AGG
 COUNT_BIG
 GROUPING
 GROUPING_ID
 STDEV
 STDEVP
 STRING_AGG
 VAR
 VARPB

Tutte queste funzioni, anche se non necessario, richiedono l’utilizzo della clausola GROUP BY in
maniera da identificare un gruppo – dimensione sui dati selezionati.

Esempio:
Ho una lista di atleti professionisti suddivisi per sport di appartenenza.
Da tale lista, voglio ritornare l’altezza minima, massima e media degli atleti, suddivisa per sport
praticato.
04 Esempi di Funzione di Aggregazione
Facciamo qualche esempio a partire dalle tabelle:
SELECT
Count(lat) as Lat_Count
,Sum(lat) as Lat_Sum
,Avg(lat) as Lat_Avg
,Min(lat) as Lat_Min
,Max(lat) as Lat_Max
FROM [Corso].[dbo].City

Proviamo ora un esempio più dettagliato:

SELECT
country_name
,Count(lat) as Lat_Count
,Sum(lat) as Lat_Sum
,Avg(lat) as Lat_Avg
,Min(lat) as Lat_Min
,Max(lat) as Lat_Max
FROM [Corso].[dbo].City
Inner Join Country on Country_Id = Country.Id
Group by Country.Id, country_name;

Attraverso questa query otteniamo i valori aggregati suddivisi per Nazioni di appartenenza.
In caso avessimo altri attributi – dimensioni nella query queste dovranno esser presenti
obbligatoriamente nella clausola di Group by.

09 DDL & DML

DDL
DDL è un nome breve di Data Definition Language, che si occupa di schemi e descrizioni di
database, di come i dati dovrebbero risiedere nel database.
 CREA - per creare il database e i suoi oggetti come (tabella, indice, viste, procedura di
memorizzazione, funzione e trigger)
 ALTER: modifica la struttura del database esistente
 DROP: elimina gli oggetti dal database
 TRUNCATE: rimuove tutti i record da una tabella, inclusi tutti gli spazi allocati per i record
 COMMENTO - aggiungi commenti al dizionario dei dati
 RENAME: rinomina un oggetto
DML
DML è un nome breve di Data Manipulation Language che si occupa della manipolazione dei dati e
include le istruzioni SQL più comuni come SELEZIONA, INSERISCI, AGGIORNA, ELIMINA, ecc., E
viene utilizzato per archiviare, modificare, recuperare, eliminare e aggiornare i dati nel database.
 SELEZIONA: recupera i dati da un database
 INSERISCI: inserire i dati in una tabella
 AGGIORNA: aggiorna i dati esistenti all'interno di una tabella
 ELIMINA - Elimina tutti i record da una tabella del database
 MERGE - Funzionamento UPSERT (inserire o aggiornare)
 CHIAMATA: chiama un sottoprogramma PL / SQL o Java
 SPIEGARE PIANO - interpretazione del percorso di accesso ai dati
 LOCK TABLE - controllo della concorrenza
DCL
DCL è un nome breve di Data Control Language che include comandi come GRANT e riguarda
principalmente diritti, autorizzazioni e altri controlli del sistema di database.
 CONCESSIONE: consente agli utenti di accedere ai privilegi del database
 REVOKE: revoca agli utenti i privilegi di accesso forniti utilizzando il comando GRANT
TCL
TCL è un nome breve di Transaction Control Language che si occupa delle transazioni all'interno di
un database.
 COMMIT: commette una transazione
 ROLLBACK - rollback di una transazione in caso di errore
 SAVEPOINT - per ripristinare i punti di transazione all'interno dei gruppi
 SET TRANSACTION - specifica le caratteristiche per la transazione

Potrebbero piacerti anche