Teoria matematica e linguaggio SQL
Esempi

Tabella "anagrafica"

cognome
nome
tessera
età
peso
LottiDaniela X1X23AB 2354.5
Ferrari ClaudiaXX12T54 2456
Feltri GuglielmoAA32X67 4572
Feltri DanielaER58GH4 1948

Insieme dei cognomi o
Dominio dei cognomi
Attributo cognome
Lotti... ...Feltri...
...... ...
...
...Ferrari...
... ...
...Cavicchioli...
... ...
...Pistolazzi
Lotti
Ferrari
Feltri

Insieme delle età o
Dominio delle età
Attributo età
45... ...23...
...... ...
... ...
...16 ...44...
... ...
...23...
... ...
...12
19
23
24
45

Tabella "corsi"

tessera
corso
data_iscrizione
quota_iscrizione
data_ scadenza
X1X23AB nuoto
01/09/96
240.000
01/03/96
XX12T54 tennis
12/10/96
200.000
12/01/96
AA32X67 squash
05/11/96
100.000
05/01/96
ER58GH4 pallavolo
11/11/96
150.000
11/02/96
XX12T54 nuoto
01/12/96
120.000
01/03/96
X1X23AB scherma
15/12/96
175.000
15/03/96

Insieme dei corsi o
Dominio dei corsi
Attributo corso
nuoto... ...equitazione...
...... ...
... ...
...pattinaggio...squash...
... ...
...pallavolo...
... ...
...scherma
nuoto
pattinaggio
scherma
squash
tennis


TUPLA

Feltri GuglielmoAA32X67 4572
È una tupla della relazione "anagrafica" (della tabella "anagrafica").


AA32X67 squash
05/11/96
100.000
05/01/96
È una tupla della relazione "corsi" (della tabella "corsi").



ATTRIBUTO

corso
nuoto
pallavolo
scherma
squash
tennis
La colonna si chiama corso, questo è l'attributo.
Quelli che sono presentati sono i valori dell'attributo in quella relazione o tabella "corsi".


ALTRA DEFINIZIONE DI RELAZIONE

Si puņ dare una seconda definizione di relazione:

Una relazione di grado n è un insieme di tuple t, dove t è una funzione

t: Ai Di (i= 1, 2, ..,n)
che assegna ad ogni nome di attributo Ai un valore del dominio Di.

Lo schema di una relazione è la lista dei nomi degli attributi usati per la rappresentazione tabellare di quella relazione. Se una relazione ha nome R e gli attributi di R sono A1, A2, ..., Ak, lo schema della relazione è di solito rappresentato come:

R(A1, A2, ..., Ak).

L'ordine secondo il quale sono descritti gli attributi non ha importanza.


ESEMPIO DI PRODOTTO CARTESIANO FRA DUE RELAZIONI

SELECT * FROM anagrafica, corsi

Ad ogni riga della tabella anagrafica viene agganciata ad una riga della tabella corsi

cognome
nome
anagrafica.tessera
età
peso
corsi.tessera
corso
data_iscrizione
quota_iscrizione
data_scadenza
1 Lotti Daniela X1X23AB 23 54.5 X1X23AB nuoto 01/09/96 240.000 01/03/96
2 Lotti Daniela X1X23AB 23 54.5 XX12R54 tennis 12/10/96 200.000 12/01/96
3 Lotti Daniela X1X23AB 23 54.5 AA32X67 squash 05/11/96 100.000 05/01/96
4 Lotti Daniela X1X23AB 23 54.5 ER58GH4 pallavolo 11/11/96 150.000 11/02/96
5 Lotti Daniela X1X23AB 23 54.5 XX12T54 nuoto 01/12/96 120.000 01/03/96
6 Lotti Daniela X1X23AB 23 54.5 X1X23AB scherma 15/12/96 175.000 15/03/96
7 Ferrari Claudia XX12T54 24 56 X1X23AB nuoto 01/09/96 240.000 01/03/96
8 Ferrari Claudia XX12T54 24 56 XX12T54 tennis 12/10/96 200.000 12/01/96
9 Ferrari Claudia XX12T54 24 56 AA32X67 squash 05/11/96 100.000 05/01/96
10 Ferrari Claudia XX12T54 24 56 ER58GH4 pallavolo 11/11/96 150.000 11/02/96
11 Ferrari Claudia XX12T54 24 56 XX12T54 nuoto 01/12/96 120.000 01/03/96
12 Ferrari Claudia XX12T54 24 56 X1X23AB scherma 15/12/96 175.000 15/03/96
13 Feltri Guglielmo AA32X67 45 72 X1X23AB nuoto 01/09/96 240.000 01/03/96
14 Feltri Guglielmo AA32X67 45 72 XX12T54 tennis 12/10/96 200.000 12/01/96
15 Feltri Guglielmo AA32X67 45 72 AA32X67 squash 05/11/96 100.000 05/01/96
16 Feltri Guglielmo AA32X67 45 72 ER58GH4 pallavolo 11/11/96 150.000 11/02/96
17 Feltri Guglielmo AA32X67 45 72 XX12T54 nuoto 01/12/96 120.000 01/03/96
18 Feltri Guglielmo AA32X67 45 72 X1X23AB scherma 15/12/96 175.000 15/03/96
19 Feltri Daniela ER58GH4 19 48 X1X23AB nuoto 01/09/96 240.000 01/03/96
20 Feltri Daniela ER58GH4 19 48 XX12T54 tennis 12/10/96 200.000 12/01/96
21 Feltri Daniela ER58GH4 19 48 AA32X67 squash 05/11/96 100.000 05/01/96
22 Feltri Daniela ER58GH4 19 48 ER58GH4 pallavolo 11/11/96 150.000 11/02/96
23 Feltri Daniela ER58GH4 19 48 XX12T54 nuoto 01/12/96 120.000 01/03/96
24 Feltri Daniela ER58GH4 19 48 X1X23AB scherma 15/12/96 175.000 15/03/96


ESEMPI DI RELAZIONI

Un esempio di relazione è dato dalla tabella "anagrafica"

Dominio
dei cognomi (A1)
Dominio
dei nomi (A2)
Dominio
delle tessere (A3)
Dominio
delle età (A4)
Dominio
dei pesi (A5)
Lotti...Feltri
.........
...Ferrari
...Chiti...
Pistolazzi......
Daniela...Erika
...Claudia...
...Stefania
...Ida...
Isotta......
XD231ASII12F4R
KJ45FS3E...
...JJ1S1WK
...PA89I8Y
XXXD1E3...
19...25
...45...
...12
...66...
24......
79...55
...65...
...92
...66...
59......

Essa è stata ottenuta dal prodotto cartesiano di 5 domini:
(A1, A2, A3, A4, A5 A1×A2×A3×A4×A5)
da cui è stato estratto un sottoinsieme:

cognome
nome
tessera
età
peso
LottiDaniela X1X23AB 2354.5
Ferrari ClaudiaXX12T54 2456
Feltri GuglielmoAA32X67 4572
Feltri DanielaER58GH4 1948


Un esempio di relazione è dato dalla tabella "corsi"

Dominio
delle tessere (B1)
Dominio
dei corsi (B2)
Dominio
delle date di iscrizione (B3)
Dominio
delle quote di iscrizione (B4)
Dominio
delle date di scadenza (B5)
XD231ASII12F4R
KJ45FS3E...
...JJ1S1WK
...PA89I8Y
XXXD1E3...
nuoto...tennis
...squash...
...volley
...scherma...
jogging......
1/1/971/11/96
......
...1/12/96
5/9/96...
5/10/96...
100.000250.000
75.000...
...50.000
260.000...
150.000...
1/1/971/2/96
......
...1/4/96
5/3/97...
5/5/97...

Essa è stata ottenuta dal prodotto cartesiano di 5 domini:
(B1, B2, B3, B4, B5 B1×B2×B3×B4×B5)
da cui è stato estratto un sottoinsieme:

tessera
corso
data_iscrizione
quota_iscrizione
data_ scadenza
X1X23AB nuoto
01/09/96
240.000
01/03/96
XX12T54 tennis
12/10/96
200.000
12/01/96
AA32X67 squash
05/11/96
100.000
05/01/96
ER58GH4 pallavolo
11/11/96
150.000
11/02/96
XX12T54 nuoto
01/12/96
120.000
01/03/96
X1X23AB scherma
15/12/96
175.000
15/03/96


ESEMPI DI PROIEZIONI

SELECT cognome, nome, peso FROM anagrafica

Tabella risultante dalla SELECT:

cognome
nome
peso
LottiDaniela 54.5
Ferrari Claudia56
Feltri Guglielmo72
Feltri Daniela48

Tabella "anagrafica" da cui, con la SELECT, ho estratto solo gli attributi che mi interessavano:

cognome
nome
tessera
età
peso
LottiDaniela X1X23AB 2354.5
Ferrari ClaudiaXX12T54 2456
Feltri GuglielmoAA32X67 4572
Feltri DanielaER58GH4 1948


SELECT tessera, corso, data_scadenza FROM anagrafica

Tabella risultante dalla SELECT:

tessera
corso
data_ scadenza
X1X23AB nuoto
01/03/96
XX12T54 tennis
12/01/96
AA32X67 squash
05/01/96
ER58GH4 pallavolo
11/02/96
XX12T54 nuoto
01/03/96
X1X23AB scherma
15/03/96

Tabella "corsi" da cui, con la SELECT, ho estratto solo gli attributi che mi interessavano:

tessera
corso
data_iscrizione
quota_iscrizione
data_ scadenza
X1X23AB nuoto
01/09/96
240.000
01/03/96
XX12T54 tennis
12/10/96
200.000
12/01/96
AA32X67 squash
05/11/96
100.000
05/01/96
ER58GH4 pallavolo
11/11/96
150.000
11/02/96
XX12T54 nuoto
01/12/96
120.000
01/03/96
X1X23AB scherma
15/12/96
175.000
15/03/96


ESEMPI DI SELEZIONE

SELECT * FROM anagrafica where peso > 55

Tabella risultante dalla SELECT:

cognome
nome
tessera
età
peso
Ferrari ClaudiaXX12T54 2456
Feltri GuglielmoAA32X67 4572

Tabella "anagrafica" da cui, con la SELECT, ho estratto solo gli attributi che mi interessavano:

cognome
nome
tessera
età
peso
LottiDaniela X1X23AB 2354.5
Ferrari ClaudiaXX12T54 2456
Feltri GuglielmoAA32X67 4572
Feltri DanielaER58GH4 1948


SELECT * FROM corsi where quota_iscrizione < 175000

Tabella risultante dalla SELECT:

tessera
corso
data_iscrizione
quota_iscrizione
data_ scadenza
AA32X67 squash
05/11/96
100.000
05/01/96
ER58GH4 pallavolo
11/11/96
150.000
11/02/96
XX12T54 nuoto
01/12/96
120.000
01/03/96

Tabella "corsi" da cui, con la SELECT, ho estratto solo gli attributi che mi interessavano:

tessera
corso
data_iscrizione
quota_iscrizione
data_ scadenza
X1X23AB nuoto
01/09/96
240.000
01/03/96
XX12T54 tennis
12/10/96
200.000
12/01/96
AA32X67 squash
05/11/96
100.000
05/01/96
ER58GH4 pallavolo
11/11/96
150.000
11/02/96
XX12T54 nuoto
01/12/96
120.000
01/03/96
X1X23AB scherma
15/12/96
175.000
15/03/96


ESEMPI DI SELEZIONE E PROIEZIONE

SELECT cognome, nome FROM anagrafica where età < 25

Tabella risultante dalla SELECT:

cognome
nome
LottiDaniela
Ferrari Claudia
Feltri Daniela

Tabella "anagrafica" da cui, con la SELECT, ho estratto solo gli attributi che mi interessavano:

cognome
nome
tessera
età
peso
LottiDaniela X1X23AB 2354.5
Ferrari ClaudiaXX12T54 2456
Feltri GuglielmoAA32X67 4572
Feltri DanielaER58GH4 1948


SELECT tessera, corso FROM corsi where quota_iscrizione < 175000

Tabella risultante dalla SELECT:

tessera
corso
AA32X67 squash
ER58GH4 pallavolo
XX12T54 nuoto

Tabella "corsi" da cui, con la SELECT, ho estratto solo gli attributi che mi interessavano:

tessera
corso
data_iscrizione
quota_iscrizione
data_ scadenza
X1X23AB nuoto
01/09/96
240.000
01/03/96
XX12T54 tennis
12/10/96
200.000
12/01/96
AA32X67 squash
05/11/96
100.000
05/01/96
ER58GH4 pallavolo
11/11/96
150.000
11/02/96
XX12T54 nuoto
01/12/96
120.000
01/03/96
X1X23AB scherma
15/12/96
175.000
15/03/96


ESEMPI DI JOIN

SELECT * FROM anagrafica, corsi WHERE età < 25 AND corso <> "scherma"

Ad ogni riga della tabella anagrafica viene agganciata ad una riga della tabella corsi

Tabella risultante:

cognome
nome
anagrafica.tessera
età
peso
corsi.tessera
corso
data_iscrizione
quota_iscrizione
data_scadenza
1 Lotti Daniela X1X23AB 23 54.5 X1X23AB nuoto 01/09/96 240.000 01/03/96
2 Lotti Daniela X1X23AB 23 54.5 XX12R54 tennis 12/10/96 200.000 12/01/96
3 Lotti Daniela X1X23AB 23 54.5 AA32X67 squash 05/11/96 100.000 05/01/96
4 Lotti Daniela X1X23AB 23 54.5 ER58GH4 pallavolo 11/11/96 150.000 11/02/96
5 Lotti Daniela X1X23AB 23 54.5 XX12T54 nuoto 01/12/96 120.000 01/03/96
7 Ferrari Claudia XX12T54 24 56 X1X23AB nuoto 01/09/96 240.000 01/03/96
8 Ferrari Claudia XX12T54 24 56 XX12T54 tennis 12/10/96 200.000 12/01/96
9 Ferrari Claudia XX12T54 24 56 AA32X67 squash 05/11/96 100.000 05/01/96
10 Ferrari Claudia XX12T54 24 56 ER58GH4 pallavolo 11/11/96 150.000 11/02/96
11 Ferrari Claudia XX12T54 24 56 XX12T54 nuoto 01/12/96 120.000 01/03/96
19 Feltri Daniela ER58GH4 19 48 X1X23AB nuoto 01/09/96 240.000 01/03/96
20 Feltri Daniela ER58GH4 19 48 XX12T54 tennis 12/10/96 200.000 12/01/96
21 Feltri Daniela ER58GH4 19 48 AA32X67 squash 05/11/96 100.000 05/01/96
22 Feltri Daniela ER58GH4 19 48 ER58GH4 pallavolo 11/11/96 150.000 11/02/96
23 Feltri Daniela ER58GH4 19 48 XX12T54 nuoto 01/12/96 120.000 01/03/96

Ecco le tuple che sono state scartare perche non soddisfacevano le condizioni:

cognome
nome
anagrafica.tessera
età
peso
corsi.tessera
corso
data_iscrizione
quota_iscrizione
data_scadenza
6 Lotti Daniela X1X23AB 23 54.5 X1X23AB scherma 15/12/96 175.000 15/03/96
12 Ferrari Claudia XX12T54 24 56 X1X23AB scherma 15/12/96 175.000 15/03/96
13 Feltri Guglielmo AA32X67 45 72 X1X23AB nuoto 01/09/96 240.000 01/03/96
14 Feltri Guglielmo AA32X67 45 72 XX12T54 tennis 12/10/96 200.000 12/01/96
15 Feltri Guglielmo AA32X67 45 72 AA32X67 squash 05/11/96 100.000 05/01/96
16 Feltri Guglielmo AA32X67 45 72 ER58GH4 pallavolo 11/11/96 150.000 11/02/96
17 Feltri Guglielmo AA32X67 45 72 XX12T54 nuoto 01/12/96 120.000 01/03/96
18 Feltri Guglielmo AA32X67 45 72 X1X23AB scherma 15/12/96 175.000 15/03/96
24 Feltri Daniela ER58GH4 19 48 X1X23AB scherma 15/12/96 175.000 15/03/96


ESEMPI DI JOIN NATURALE

SELECT cognome, come, corso, data_scadenza FROM anagrafica, corsi WHERE anagrafica.tessera = corsi.tessera

Si realizza il prodotto cartesiano di "anagrafica" e "corsi", si estraggono le tuple che soddisfano le condizioni (selezione), e da tali tuple si considerano solo gli attributi scelti (proiezione). Tabella risultante:

cognome
nome
corso
data_scadenza
1 Lotti Daniela nuoto 01/03/96
6 Lotti Daniela scherma 15/03/96
8 Ferrari Claudia tennis 12/01/96
11 Ferrari Claudia nuoto 01/03/96
15 Feltri Guglielmo squash 05/01/96
22 Feltri Daniela pallavolo 11/02/96