Professional Documents
Culture Documents
Uso interattivo:
lutente presenta al sistema una richiesta di dati. Tale
richiesta prende il nome di interrogazione (query).
Linterrogazione viene interpretata dal sistema, che
in risposta restituisce i dati richiesti.
Nella richiesta devono essere specificate le propriet
dei dati che interessano. Se ad es. vogliamo lelenco
dei libri scritti da Calvino, nella richiesta deve essere
specificata questa propriet.
Linterrogazione deve essere formulata per mezzo di
un linguaggio formale
R.Gori - G.Leoni
Uso da programmi:
questo uso riservato ad utenti programmatori.
Le interrogazioni fanno parte di un programma
applicativo che pu essere eseguito dal sistema
numerose volte, ed il risultato delle interrogazioni
pu essere utilizzato dal programma per successive
elaborazioni
Ci limiteremo a trattare luso interattivo della BD.
R.Gori - G.Leoni
R.Gori - G.Leoni
ESEMPIO
ISBN
883860789-9
343859804-5
110786949-3
477800355-2
R.Gori - G.Leoni
1.
Titolo
Baudolino
La storia
Bar sport
Lamante
AnnoEd
2002
2001
2000
2001
ISBN
Titolo
343859804-5 La storia
477800355-2 Lamante
2.
CasaEd
Mondadori
Einaudi
Feltrinelli
Mondadori
CasaEd
Einaudi
Mondadori
AnnoEd
2001
2001
Titolo
La storia
Lamante
R.Gori - G.Leoni
CasaEd
Einaudi
Mondadori
Il linguaggio per interrogazioni SQL
SELECT Attributo1,Attributo2,...
presente in ogni interrogazione e definisce lo
schema della relazione risultato. Pi avanti vedremo
che pu avere una forma pi complessa.
SELECT Titolo, CasaEd
significa che ci interessano il titolo e la casa editrice
R.Gori - G.Leoni
FROM Relazione1,Relazione2,...
presente in ogni interrogazione e specifica quali
relazioni occorre visitare per ottenere il risultato.
FROM Catalogo
significa che per estrarre le informazioni che interessano
occorre prendere in esame la relazione Catalogo
R.Gori - G.Leoni
10
WHERE Condizione
La condizione espressa sugli attributi delle
relazioni specificate nella clausola FROM.
Pu non essere presente, quando non si vogliono
specificare condizioni.
WHERE AnnoEd = 2001
significa che interessano informazioni relative ai libri
editi nel 2001.
R.Gori - G.Leoni
11
Titolo
La storia
Lamante
CasaEd
Einaudi
Mondadori
12
Invece linterrogazione
Titolo
Baudolino
La storia
Bar sport
Lamante
CasaEd
Mondadori
Einaudi
Feltrinelli
Mondadori
13
14
Il risultato sar
CasaEd
Mondadori
Einaudi
Feltrinelli
Mondadori
e se una casa editrice presente nel catalogo con
1000 libri, il suo nome comparir 1000 volte nel risultato
R.Gori - G.Leoni
15
CasaEd
Mondadori
Einaudi
Feltrinelli
R.Gori - G.Leoni
16
17
ISBN
Titolo
110786949-3 Bar sport
R.Gori - G.Leoni
CasaEd
Feltrinelli
AnnoEd
2000
18
WHERE Condizione
Finora abbiamo considerato esempi molto semplici,
ma la condizione presente nella clausola WHERE
19
E1 cfr E2
ove:
20
21
22
Titolo
Baudolino
Lamante
La storia
Bar sport
Lamante
CasaEd
Mondadori
Feltrinelli
Einaudi
Feltrinelli
Mondadori
Anno
2002
2001
2001
2000
2001
23
Titolo
La storia
R.Gori - G.Leoni
CasaEd
Einaudi
24
Titolo
Lamante
La storia
Lamante
R.Gori - G.Leoni
CasaEd
Feltrinelli
Einaudi
Mondadori
25
Titolo
CasaEd
26
27
R.Gori - G.Leoni
28
Interrogazioni su pi relazioni
Nella clausola FROM possono essere presenti pi
relazioni. Ci necessario quando le informazioni per
eseguire linterrogazione sono distribuite su relazioni
diverse, vale a dire:
quando gli attributi presenti nella clausola SELECT o
nella clausola WHERE appartengono a relazioni
diverse
R.Gori - G.Leoni
ESEMPIO
29
Film(CodFilm,Titolo,Regista,Anno)
Attori(CodFilm*, Attore)
e supponiamo di volere i titoli dei film in cui recita
C. Eastwood
Lattributo Titolo nella relazione Film mentre
lattributo Attore nella relazione Attori.
Occorre pertanto visitare entrambe le relazioni.
Supponiamo di avere le seguenti istanze di relazione:
R.Gori - G.Leoni
30
FILM
CodFilm Titolo
PW54
Million dollar baby
MX23
Per un pugno di dollari
AY78
Eyes wide shut
ATTORI
CodFilm Attore
PW54
C. Eastwood
MX23
C. Eastwood
PW54
H. Swank
PW54
M. Freeman
MX23
G. M. Volont
AY78
AY78
Regista
C.Eastwood
S.Leone
S.Kubrik
Anno
2004
1964
1999
T. Cruise
N. Kidman
R.Gori - G.Leoni
31
Regista
C.Eastwood
S.Leone
S.Leone
C.Eastwood
C.Eastwood
S.Kubrik
S.Kubrik
Anno
2004PW54
1964MX23
1964MX23
2004PW54
2004PW54
1999AY78
1999AY78
Attore
C.Eastwood
C.Eastwood
G.M.Volont
H. Swank
M.Freeman
T.Cruise
N.Kidman
32
33
34
35
GIUNZIONE
Loperazione che associa le ennuple di due relazioni (ad
es. le ennuple di Film con quelle di Attori) detta
giunzione, e le condizioni di eguaglianza tra la chiave
esterna di una relazione e la chiave primaria di unaltra (ad
es Film.CodFilm = Attori.CodFilm) detto predicato di
giunzione.
R.Gori - G.Leoni
36
37
R.Gori - G.Leoni
38
R.Gori - G.Leoni
39
40
R.Gori - G.Leoni
41
R.Gori - G.Leoni
42
Cassette
Contiene
Recita
Attori
R.Gori - G.Leoni
Noleggiata
Clienti
Il linguaggio per interrogazioni SQL
43
La clausola ORDER BY
La clausola ORDER BY, specificata dopo SELECTFROM-WHERE fa s che il risultato sia ordinato; si pu
scegliere fra ordinamento crescente (se non si specifica
nulla), o decrescente (se si specifica desc).
Lordinamento pu essere fatto anche su pi attributi.
SELECT Cl.Cognome, Cl.Nome, Ca.DataNoleg
FROM Clienti Cl, Cassette Ca
WHERE Cl.CodiceCliente = Ca.CodiceCliente
and Ca.DataNoleg < 31/03/05
ORDER BY Cl.Cognome, Cl.Nome
R.Gori - G.Leoni
44
Funzioni di aggregazione
SQL consente di estrarre dalla Base di Dati informazioni
che non sono esplicitamente presenti, ma si ottengono da
quelle presenti utilizzando opportune funzioni dette
funzioni di aggregazione.
ESEMPIO
45
46
R.Gori - G.Leoni
47
48
49
R.Gori - G.Leoni
50
AttivitFormative
Esami
CodAF
AA252
BB112
CC205
Matric
123
234
345
123
123
345
NomeAF
Basi di..
Storia...
Letter..
CFU
5
10
10
CodAF
AA252
BB112
AA252
BB112
CC205
BB112
Voto
30
24
28
27
22
27
AttivitFormative&Esami
CodAF NomeAF CFU
AA252 Basi di.. 5
AA252 Basi di.. 5
BB112 Storia... 5
BB112 Storia... 10
BB112 Storia... 10
CC205 Letter.. 10
51
Matric
123
CodAF Voto
AA252 30
345
234
AA252
BB112
123
345
123
BB112 27
BB112 27
CC205 22
28
24
52
AttivitFormative&Esami di 123
CodAF NomeAF CFU
Matric
123
AA252 Basi di.. 5
123
BB112 Storia... 10
123
CC205 Letter.. 10
CodAF
AA252
BB112
CC205
Voto
30
27
22
53
54
55
La clausola GROUP BY
Si presenta sovente la necessit di avere informazioni su
dati aggregati in base a qualche criterio. Ad es. il numero
di esami sostenuti da ciascuno studente, il numero di
studenti iscritti a ciascun Corso di Laurea, ...
SQL offre la possibilit di estrarre tali informazioni con
luso delloperatore GROUP BY.
R.Gori - G.Leoni
56
57
58
Studenti
Matric Nome
123
Silvia
234
Giulia
345
Silvia
CdL
SBC
CMT
SBC
R.Gori - G.Leoni
Studenti&Esami
Matric Nome
CdL
Silvia
SBC
123
Silvia
SBC
123
Silvia
SBC
123
Giulia CMT
234
Silvia
SBC
345
Silvia
SBC
345
59
Matric
CodAF Voto
123
123
123
234
345
345
AA252
BB112
CC205
BB112
AA252
BB112
30
27
22
24
28
27
60
Matric
123
123
123
Nome
Silvia
Silvia
Silvia
CdL
SBC
SBC
SBC
Matric
CodAF Voto
123
123
123
AA252 30
BB112 27
CC205 22
Matric
234
Nome
Giulia
CdL
CMT
Matric
CodAF Voto
234
BB112 24
Matric
Nome
CdL
Matric
CodAF Voto
345
345
Silvia
Silvia
SBC
SBC
345
345
AA252 28
BB112 27
R.Gori - G.Leoni
61
NEsami
3
1
2
Il linguaggio per interrogazioni SQL
62
Genera i gruppi
R.Gori - G.Leoni
gruppo
Matric
123
123
123
345
345
63
Silvia
Nome
Silvia
Silvia
Silvia
Silvia
Silvia
CdL
SBC
SBC
SBC
SBC
SBC
Matric
123
123
123
345
345
CodAF
AA252
BB112
CC205
AA252
BB112
gruppo Giulia
Matric Nome
234
Giulia
CdL
CMT
Matric
234
CodAF Voto
BB112 24
R.Gori - G.Leoni
Voto
30
27
22
28
27
64
Risultato
Nome
NEsami
Silvia 5
Giulia 1
Attenzione!
Non abusare della GROUP BY, ma utilizzarla solo se
necessario.
R.Gori - G.Leoni
65
La clausola HAVING
La clausola Having si utilizza solo in connessione con
Group BY, e serve a specificare delle condizioni che
devono essere soddisfatte dai gruppi.
? La matricola ed il Numero di crediti acquisiti da
ciascuno studente
SELECT E.Matricola, sum(CFU) as NCrediti
FROM Esami E, AttivitFormative A
WHERE E.CodiceAF = A.CodiceAF
GROUP BY E.Matricola
R.Gori - G.Leoni
66
67
Ma supponiamo di volere:
? La matricola ed il Numero di crediti acquisiti da
ciascuno studente che non ha voti inferiori a 27.
R.Gori - G.Leoni
68
R.Gori - G.Leoni
AttivitFormative&Esami
CodAF NomeAF CFU
AA252 Basi di.. 5
AA252 Basi di.. 5
BB112 Storia... 5
BB112 Storia... 10
BB112 Storia... 10
CC205 Letter.. 10
R.Gori - G.Leoni
69
Matric
123
CodAF Voto
AA252 30
345
234
AA252
BB112
123
345
123
BB112 27
BB112 27
CC205 22
28
24
70
gruppo 123
CodAF
AA252
BB112
CC205
NomeAF
Basi di..
Storia...
Letter..
CFU
5
10
10
Matric
123
123
123
CodAF
AA252
BB112
CC205
Voto
30
28
22
NomeAF CFU
Storia... 5
Matric
CodAF
Voto
234
BB112
24
Matric
CodAF
Voto
345
AA252
28
345
BB112
27
gruppo 234
CodAF
BB112
gruppo 345
71
R.Gori - G.Leoni
72
ALTRI PREDICATI
In tutti gli esempi visti sin qui, i predicati presenti nella
clausola WHERE sono predicati di confronto:
E1 cfr E2
Abbiamo anche visto che il secondo termine del
confronto pu essere costituito da un comando SELECT,
purch abbia come risultato un valore singolo.
Vedremo adesso altri predicati ed altri operatori che
estendono le capacit espressive di SQL
R.Gori - G.Leoni
73
R.Gori - G.Leoni
74
SELECT Collocazione
FROM Cassette
WHERE CodiceCliente is null
R.Gori - G.Leoni
75
SELECT Collocazione
FROM Cassette
WHERE DataNoleg is not null and
DataNoleg > 1/1/05
R.Gori - G.Leoni
76
77
A LIKE maschera
A NOT LIKE maschera
Controlla che il valore dellattributo A sia o non sia
conforme alla maschera.
maschera una sequenza qualunque di caratteri che
pu contenere i caratteri speciali - e %
R.Gori - G.Leoni
78
R.Gori - G.Leoni
79
R.Gori - G.Leoni
80
A BETWEEN E1 AND E2
A NOT BETWEEN E1 AND E2
Controlla che il valore dellattributo A sia o non sia
compreso tra E1 ed E2
Non ha grande interesse;
A BETWEEN E1 AND E2
equivalente a
E
E
E
E
81
IN (V1,V2, )
IN (SOTTOSELECT)
NOT IN (V1, V2,...)
NOT IN (SOTTOSELECT)
82
SELECT R.CodiceVHS
FROM Recita R
WHERE Francia not in
(SELECT Nazionalit
FROM Attori A
WHERE A.Nome = R.Nome)
R.Gori - G.Leoni
83
84
R.Gori - G.Leoni
85
EXISTS (SOTTOSELECT)
Restituisce il valore true se il risultato della sottoselect
non vuoto
NOT EXISTS (SOTTOSELECT)
Restituisce il valore true se lil risultato della sottoselect
vuoto
pi utile nella forma negata
R.Gori - G.Leoni
86
SELECT R.CodiceVHS
FROM Recita R
WHERE not exists
(SELECT *
FROM Attori A
WHERE A.Nome = R.Nome
and A.Nazionalit = Francia)
R.Gori - G.Leoni
87
88
R.Gori - G.Leoni
89
90
Studenti
Matric Nome
123
Silvia
234
Giulia
345
Silvia
CdL
SBC
CMT
SBC
Risultato d)
Matric Nome
123
Silvia
234
Giulia
CdL
SBC
CMT
R.Gori - G.Leoni
91
Esami
Matric
123
234
345
123
123
345
CodAF
AA252
BB112
AA252
BB112
CC205
BB112
Voto
30
24
28
27
22
27
92
e1)
SELECT S.Matricola, S.Nome
FROM Studenti S
WHERE not exists
(SELECT *
FROM Esami E
WHERE S.Matricola = E.Matricola
and Voto < 27)
R.Gori - G.Leoni
93
Risultato e1)
Matric Nome
345
Silvia
Se avessimo scritto, per voler fare a meno della sottoselect
e2)
SELECT DISTINCT S.Matricola, S.Nome
FROM Studenti S, Esami E
WHERE S.Matricola = E.Matricola
and not(Voto < 27)
R.Gori - G.Leoni
94
avremmo avuto
Risultato e2)
Matric Nome
345
Silvia
123
Silvia
in quanto 123 Silvia ha voti superiori a 27, ma poich
ha anche voti inferiori a 27 non soddisfa alla condizione
espressa nella e).
Osserviamo che la interrogazione e1) restituisce anche
gli studenti che non hanno dato alcun esame.
R.Gori - G.Leoni
95
96
97
98
SELECT Attributi
FROM Relazioni1
WHERE not exists
( SELECT *
FROM Relazioni2
WHERE .)
Relazioni1 hanno gli attributi del risultato, Relazioni2
hanno gli attributi della condizione.
Nella clausola Where interna deve esser presente anche
la condizione di giunzione fra Relazioni2 e Relazioni1.
Chiariremo questo discorso con altri esempi.
R.Gori - G.Leoni
99
Atri Predicati
SQL offre altri predicati, in realt ridondanti perch non
aggiungono capacit di calcolo ma solo espressivit.
100
101
R.Gori - G.Leoni
102
R.Gori - G.Leoni
103
104
ESEMPI
Riprendiamo lo schema
FILM(CodiceVHS, Titolo, Regista, Anno)
ATTORI(Nome, Nazionalit)
RECITA(CodiceVHS*, Nome*, Personaggio)
R.Gori - G.Leoni
105
C.
R.Gori - G.Leoni
106
R.Gori - G.Leoni
107
108
SELECT A.Nome
FROM Attori A
WHERE not exists
(SELECT *
FROM
Film F, Recita R
WHERE A.Nome = R.Nome
and R.CodiceVHS = F.CodiceVHS
and F.Regista < > Fellini)
R.Gori - G.Leoni
109
110
R.Gori - G.Leoni
111