Structured Query Language SQL un linguaggio di
definizione e manipolazione
dei dati
Esercitazioni del Corso di
Sistemi Informativi
Marina Mongiello
1
SQL come standard

Varie versioni con successivi
miglioramenti:
• SQL-1 o SQL-89
• SQL-2 o SQL-92 (entry, intermediate e full)
• SQL-3?
2
La struttura base della query
L’interrogazione è specificata in maniera dichiarativa: si
specifica non il modo in cui l’interrogazione deve essere
eseguita, ma le caratteristiche del risultato che deve
fornire.
Query semplici:
Select AttrExpr [[as] Alias]{, AttrExpr [[as] Alias]}
From TableName [[as] Alias]{, TableName [[as] Alias]}
[Where condition]
Le tre parti componenti vengono chiamate target list, from clause e
where clause
3
Ciascun attributo e tabella può essere ridenominato mediante un
alias.
Select nome as nome_di _battesimo
From Impiegati
Where cognome=‘De Paperis’
Select *
From Impiegati
Cosa restituisce??
Select *
From Impiegati
Where cognome=‘De Paperis’ AND
nome=‘Pippo’
L’argomento della clausola where
si basa su condizioni composte
tramite operatori logici da predicati
semplici
* Rappresenta tutti gli attributi
delle tabelle presenti nella
clausola from, evitando di
elencarli
Select *
From Impiegati
Where cognome=‘De Paperis’
4
Query SQL in ACCESS:

In applicazioni sviluppate con ACCESS, le
query possono essere create
• mediante la griglia di struttura grafica QBE
(query by example)
• mediante la specifica in SQL
5
6
Esempi di query in SQL

Di seguito riportiamo alcuni esempi di
query in linguaggio SQL facendo
riferimento al database di esempio
“northwind” presente nell’applicazione
Microsoft Access di cui riportiamo il
diagramma delle relazioni
7
8
Esempio 1
Query di Selezione:
Si vuole determinare il nome e il cognome
degli impiegati nati dopo il 1/1/60 e assunti
dopo il 3/5/93
SELECT Impiegati.Cognome, Impiegati.Nome,
Impiegati.DataNascita, Impiegati.DataAssunzione
FROM Impiegati
WHERE (((Impiegati.DataNascita)>1/1/1960) AND
((Impiegati.DataAssunzione)>5/3/1993));
9
Griglia di struttura corrispondente all’esempio 1
10
Codice SQL corrispondente
all’esempio 1
11
Operatori aggregati

In SQL è possibile utilizzare operatori per
valutare delle proprietà su insiemi di tuple
Effettua un’operazione
di conteggio
•
•
count ( < * | [ distinct | all ] ListaAttributi>)
< sum | max | min | avg > ( [ distinct | all ] ListaAttributi )
Corrispondono alla somma,
massimo, minimo, media
Distinct elimina i duplicati
All trascura solo i valori nulli
12
Esempio 2
Query con operatori aggregati
Determinare il numero di prodotti disponibili
SELECT Count(Prodotti.IDProdotto) AS
ConteggioDiIDProdotto
FROM Prodotti;
13
Query con raggruppamento

E’ possibile dividere la tabella risultante da
una query con operatori aggregati in
sottoinsiemi, raggruppando le righe che
contengono gli stessi valori per un insieme
di attributi.
SELECT count(*) AS nomeAlias
FROM nomeTabella
group by nomeAttributo
Operatore di raggruppamento
14
Esempio 3
Query con raggruppamento
Si vogliono determinare i prodotti con prezzo
mediamente maggiore di 100
SELECT Prodotti.NomeProdotto,
Avg(Prodotti.PrezzoUnitario) AS MediaDiPrezzoUnitario
FROM Prodotti
GROUP BY Prodotti.NomeProdotto
HAVING (((Avg(Prodotti.PrezzoUnitario))>100));
15
Esempio 4
Query con raggruppamento
Determinare i fornitori a cui sia stata ordinata
merce in quantità minore di 10 pezzi
SELECT Prodotti.IDFornitore, Prodotti.QuantitàOrdinata,
Avg(Prodotti.Scorte) AS MediaDiScorte
FROM Prodotti
GROUP BY Prodotti.IDFornitore,
Prodotti.QuantitàOrdinata
HAVING (((Prodotti.QuantitàOrdinata)<10));
16
Tipi di Join

Join interno:

produce un risultato nel quale le righe sono tutte e sole
quelle ottenibili dalle righe delle due tabelle di origine, in
cui i valori delle colonne in comune sono uguali

Join esterno:
esterno sinistro ( rispettivamente destro):
•
•
include tutti i record della tabella di sinistra
(rispettivamente di destra) anche se non esistono valori
corrispondenti ai record nella tabella di destra
(rispettivamente di sinistra)
17
E’ possibile determinare il tipo di join
esterno dalle proprietà del join
18
Esempio 5
Query di Selezione
Si vuole determinare il prezzo massimo dei
prodotti forniti dalla società “Tokyo
traders”.
SELECT Max([PrezzoUnitario]) AS Espr1
FROM Fornitori INNER JOIN Prodotti ON
Fornitori.IDFornitore = Prodotti.IDFornitore
WHERE (((Fornitori.NomeSocietà)="Tokyo Traders"));
19
Query nidificate
L’argomento della clausola where puo’
essere a sua volta il risultato
dell’esecuzione di una interrogazione. Si
assume che l’espressione che compare nel
confronto sia rappresentata dal nome di un
attributo
 E’ possibile in tal caso usare gli operatori
di confronto =,<,>,>=,<=.

20
Esempio 6
Query nidificate
Determinare i prodotti al di sopra del prezzo
medio
SELECT Prodotti.NomeProdotto, Prodotti.PrezzoUnitario
FROM Prodotti
WHERE (((Prodotti.PrezzoUnitario)>(SELECT
AVG([PrezzoUnitario]) From Prodotti)))
ORDER BY Prodotti.PrezzoUnitario DESC;
21
Query di inserimento

Possono essere inserite singole righe
all’interno delle tabelle:
insert into Nometabella [Lista Attributi] <values
(ListadiValori SelctSQL)>

Oppure insiemi di righe come risultato di
una precedente selezione
22
Esempi 7,8:
Inserimento di righe
INSERT INTO Prodotti ( NomeProdotto, PrezzoUnitario )
values (‘NuovoProdotto’,10)
INSERT INTO Prodotti ( NomeProdotto, PrezzoUnitario )
SELECT Prodotti.IDCategoria, Prodotti.PrezzoUnitario
FROM Prodotti
WHERE (((Prodotti.IDCategoria)=1) AND
((Prodotti.PrezzoUnitario)>10));
23
Aggiornamento di righe

E’ possibile agiornare una o piu’ righe
mediante il comando update che presenta
la seguente sintassi:
update NomeTabella set Attributo = <Espressione |
SelectSQL |null|default>{,Attributo =<Espressione
|SelectSQL |null|default)} [where Condizione]
24
Esempio 9
Aggiornamento di righe
UPDATE Prodotti SET Prodotti.PrezzoUnitario = 20
WHERE (((Prodotti.PrezzoUnitario)=0));
25
Cancellazione di righe

La cancellazione di righe dalle tabella è
effettuata dal comando delete, la cui
sintassi è la seguente:
delete from NomeTabella [where condizione]
26
Esempio 10
Cancellazione di righe
DELETE Prodotti.NomeProdotto, *
FROM Prodotti
WHERE (((Prodotti.NomeProdotto)=”NuovoProdotto"));
27
Scarica

Structured Query Language - SQL come linguaggio di