Select I° Parte.


La sintassi completa
di questa istruzione è una delle più complicate
di questo linguaggio ma è anche la più utilizzata,
ragione per cui la analizzeremo punto per punto.
L’istruzione SELECT permette di effettuare delle
interrogazioni al notro database e di selezionare le informazioni
che ci interessano (nota: le parti tra < > sono opzionali).

select <distinct> espr1,espr2….
from tab <where condizione>

Ogni espressione può essere un campo (colonna) di una tabella
o uno degli attributi particolari che vedremo in seguito che verranno
estratti dalla tabella o dall’unione di più tabelle (tab).
La condizione ci permetti di selezionare solo i record (le righe)
che ci interessano. L’istruzione praticamente procede con tre
punti:

unisce le tabelle e ne crea una unica
elimina da questa unica tabella le righe che non soddisfano la
o le condizioni
elimina le colonne non espresse in espr1, espr2…
inserisce le colonne risultanti da un calcolo inserite in espr1,
espr2…
La clausola distinct permette di eliminare dall’interrogazione
i record uguali che si ripetono. Questo può sembrare strano,
ma se abbiamo una tabella con, per esempio, la lista degli abitanti
di una città contenente i nomi, i cognomi, gli indirizzi,
ecc… e decidiamo di vedere solo i nomi presenti:

select NOME from
CITTA

avremo come risultato un’interrogazione con una moltitudine di
righe che si ripetono riprendendo sempre lo stesso nome mentre
se inseriamo:

select distinct NOME from
CITTA

avremo un nome diverso per ogni riga.

Se si vogliono visualizzare tutti i campi di una tabella si può
usare il simbolo * o nometab.* ; nel caso in cui due campi di
due tabelle diverse abbiano lo stesso nome si può usare
la forma nometab.nomeattr .

Condizioni
Si possono ovviamente inserire più condizioni in una interrogazione
concatenando con AND o OR in base all’esigenza.

select distinct
NOME from CITTA where (ETA>20)
AND (SEX=’M’)

Un altro modo per creare una condizione è usare l’operatore
like, per esempio se vogliamo trovare tutti i nomi che contengono
una ‘A’ e una ‘R’ useremo:

select distinct
NOME from CITTA where NOME like
‘%A%R%’

L’ % è un carattere jolly che indica una qualsiasi stringa
mentre, se vogliamo indicare un solo carattere, useremo _ . Per
esempio cerchiamo tutti i nomi di 4 lettere che cominciano per
A:

select distinct NOME from
CITTA where NOME like ‘A___’

Osserviamo ora le funzioni particolari che l’SQL ci mette a disposizione;
contiamo, ad esempio, quante persone hanno come nome Andrea e
poi la media delle età di tali persone:

select count
(NOME) from CITTA where NOME=’Andrea’

oppure
select count(*)
as N_NOMI from CITTA where
NOME=’Andrea’

con "as" si assegna un il nome ad una colonna, essendo
count(*) un calcolo fornitoci da Database quella colonna avrà
nome count(*) assegnandole invece un alias con as la colonna avrà
nome N_NOMI

select avg
(ETA) from CITTA where NOME=’Andrea’

Elenchiamo ora tutte le funzioni disponibili:

count :conta gli elementi
min : valore minimo
max : valore massimo
sum : somma i valori
avg : esegue la media dei valori

Giunzioni tra tabelle (merge su campo chiave)
Il select permette di interrogare più tabelle contemporaneamente
unendole tramite un join; se ad esempio, oltre alla tabella CITTA,
abbiamo una tabella OCCUPAZIONI che contiene il nome e il lavoro
di ogni abitante, per sapere il lavoro e l’età delle persone
con nome Carlo faremo:

select LAVORO, ETA from
CITTA inner join OCCUPAZIONI on
CITTA.NOME=OCCUPAZIONI.NOME where NOME=’Carlo’

Oltre al join è possibile utilizzare due
tabelle contemporaneamente e metterle in relazione tra loro con
un semplice operatore logico:
Supponiamo di avere due tabelle, una tabella BOLLE ed una FATTURE
ove bolle conterrà il numero UNICO di bolla e fattura conterrà
il numero UNICO di fattura ed il numero di bolla che l’ha generata.
Con questa istruzione saremo in grado di individuare quali bolle
hanno generato la fattura 000145 del 10-01-2002:

select fatture.n_fattura, fatture.n_bolla
from FATTURE, BOLLE where fatture.n_bolla=bolle.n_bolla
and fatture.n_fattura=000145 and fatture.data_fattura=’10-01-2002′

Facciamo tutte le raccomandazioni del caso, l’istruzione
SQL quanto + precisa è tanto + complicata e lunga risulta,
vi pregherei da bravi programmatori di identare la vostra istruzione
SQL, è stupido e stancante ma so che il risultato finale
è molto più chiaro.

select     fatture.n_fattura,
fatture.n_bolla
from       FATTURE,
BOLLE
where
      fatture.n_bolla=bolle.n_bolla
and fatture.n_fattura=000145 and fatture.data_fattura=’10-01-2002′

O magari andate a capo per ogni criterio impostato:

select     fatture.n_fattura,
fatture.n_bolla
from       FATTURE,
BOLLE
where
      fatture.n_bolla=bolle.n_bolla

           and
fatture.n_fattura=000145
           and
fatture.data_fattura=’10-01-2002′

In questo modo tutte le istruzioni SQL risultano
più chiare e leggibili da chiunque. Vi aspetto per la prossima
lezione di SQL con la seconda parte dell’istruzione Select

Select I° Parte. ultima modifica: 2002-11-05T00:00:00+00:00 da Enrico

Related Posts

Comments are closed.