===============================
Introduzione al Linguaggio SQL
Parte 1
===============================
Una tavola non e' altro che un insieme di righe e di colonne dove
le prime sono i record e le seconde i vari campi che intendiamo
trattare.
+-------------------------------------------+
|
TAVOLA
|
+-------+-------+---+-------+-------+-------+
Riga 1
| campo | campo | C | campo | campo | campo |
+-------+-------+ O +-------+-------+-------+
Riga 2
| Mario | Volpe | L | Roma | Asti | 16100 |
+-------+-------+ O +-------+-------+-------+
Riga 3
| campo | campo | N | campo | campo | campo |
+-------+-------+ N +-------+-------+-------+
Riga n
| ..... | ..... | A | ..... | ..... | ..... |
+-------+-------+---+-------+-------+-------+
Facciamo subito un esempio.
Supponiamo di avere una tavola che rappresenta i clienti di una
ditta XXXXX composta dal numero dell'utente (che deve essere
unico), dal nome, dall'indirizzo e dalla citta'.
TAVOLA A
Num. # Nome
Indirizzo Citta'
------------------------------------A001 Rossi
V.Roma
Torino
A002 Bianchi V.Trento
Milano
A003 Verdi
V.Trieste Genova
.... ....... ......... ......
6
A001
A001
A002
A003
A003
B002
B003
B003
B002
B003
5000
5000
1000
7000
3500
CHAR(5),
CHAR(20),
CHAR(20),
CHAR(20) );
CREA TAVOLA B
( ANUM
CHAR(5),
ARTICOLO CHAR(30),
PREZZO
INTEGER );
CREA TAVOLA C
( NUM
ANUM
VENDUTI
CHAR(5),
CHAR(5),
INTEGER );
eseguire
10
11
Bolognini
Bolognesi
Bologna
Bognardi
12
14
15
Addizione
Sotrazione
Moltiplicazione
Divisione
Conteggio
Massimo
Minimo
Media
Somma
+
*
/
COUNT
MAX
MIN
AVG
SUM
16
17
18
19
determintata tavola.
In altre parole abbiamo considerato una tavola come un archivio
in cui sono memorizzati dei dati e mediante SELECT abbiamo
estratto i dati che ci interessavano.
Un sistema di database relazionale viene considerato come una
raccolta di tavole e quindi la visione che abbiamo deve essere
espansa.
I concetti generali li avevamo accennati inizialmente.
Utilizzando lo statement SELECT abbiamo specificato il nome delle
colonne scrivendo semplicemente il suo nome non preoccupandoci
invece di definire la tavola in cui queste erano contenute in
quanto, di fatto, gli esempi erano sempre e solo relativi a una
singola tavola.
Un determinato nome di colonna potrebbe essere comune a piu'
tavole.
Nel caso in cui SELECT deve ricercare dati da piu' tavole e'
chiaro che se specificassimo solo il nome di un campo potrebbe
trovarsi nei pasticci, proprio per il fatto che la colonna
potrebbe essere definita in piu' tavole.
SQL al fine di evitare questo tipo di problemi accetta la
specifica del nome di colonna preceduto da nome della tavola in
cui si trova questo.
Al fine di portare un esempio a quanto detto prima possiamo
supporre di avere le seguenti due tavole.
TAVOLA AAA
NOME INDIRIZZO
---------------Rossi V.Roma
..... ......
TAVOLA BBB
NOME IMPORTO
---------------Rossi 100000
..... ......
21
22
23
24
25
26
interrogazioni sulle
di crearle.
chiaro che cosa si
usata nel seguente
28
file principale.
Il trattamento degli indici avviene mediante un algoritmo di
B-Tree di cui non discuteremo in questo testo.
SQL e' in grado di accorgersi automaticamente dell'esistenza di
un determinato indice e quindi di utilizzare questo per il
rintracciamento dei dati al posto della ricerca sequenziale nel
file .DAT.
Come avevamo detto precedentemente l'uso degli indici da parte di
SQL puo' essere completamente trasparente all'utente.
Molti prodotti come INFORMIX SQL richiedono, durante la procedura
interattiva di creazione delle tavole, se i vari campi devono
possedere un indice associato e se questo puo' contenere chiavi
dupplicate.
La creazione da interprete di un indice puo' avvenire mediante:
CREATE INDEX NOMIND ON TAVOLA(CAMPO1, ....);
Se disponessimo di una tavola TAVOLA1 con i seguenti campi
NOME, INDIRIZZO, PIVA, IMPORTO
potremmo, ad esempio, creare un indice utilizzando come chiave
NOME+PIVA.
CREATE INDEX NEWINDEX ON TAVOLA1(NOME, PIVA);
Se avessimo scelto di creare un indice in modo che in questo non
possano risultare dupplicazioni avremmo dovuto utilizzare la
parola SQL UNIQUE nel seguente modo:
CREATE UNIQUE INDEX NEWINDEX ON TAVOLA1(NOME, PIVA);
L'eliminazione di un indice si ottiene mediante
DROP INDEX NOMIND;
30
31
32