Anteprima
Vedrai una selezione di 3 pagine su 7
Informatica - le espressioni e le funzioni Pag. 1 Informatica - le espressioni e le funzioni Pag. 2
Anteprima di 3 pagg. su 7.
Scarica il documento per vederlo tutto.
Informatica - le espressioni e le funzioni Pag. 6
1 su 7
D/illustrazione/soddisfatti o rimborsati
Disdici quando
vuoi
Acquista con carta
o PayPal
Scarica i documenti
tutte le volte che vuoi
Estratto del documento

CASA - de tomasoferrari

La seconda query, ricordiamo che si tratta soltanto di un esempio, elenca le autovetture aventi cilindrata pari (divisibile per due). Riportiamo anche questa insieme al risultato prodotto. E' stata utilizzata la funzione che calcola il resto della divisione tra due valori. Il nome di questa funzione è MOD ed i suoi argomenti sono due: dividendo e divisore. Nel nostro caso i suoi argomenti saranno cc e 2, mentre per ottenere il risultato voluto, la condizione imporrà che il suo risultato sia uguale a zero.
SELECT nome
FROM modello
WHERE mod(cc,2) = 0;
NOME ------------------ 126testarossa 412cx 25 limousine cx25 trd turbo dscx 25 gti turbo 8.2 Le funzioni colonna Notevolmente più articolato è il discorso sulle funzioni colonna o di gruppo. Come già anticipato, questo insieme di funzioni si caratterizza per il fatto di restituire un valore in corrispondenza di un gruppo di valori o dei valori che formano una colonna. Nel primo esempio.

Utilizzeremo la funzione di gruppo che calcola il prezzo medio delle autovetture della relazione MODELLO. Riportiamo la query ed il risultato della sua esecuzione.

SELECT avg(lit)
FROM modello; [28]
AVG(LIT)
----------
98800.0833

Una seconda differenza con le funzioni scalari si ha nei confronti dei valori nulli: tutte le funzioni di gruppo, eccetto la COUNT, non considerano ai fini del calcolo tali valori. Un semplice esempio di questo, si ha calcolando il tempo medio di attesa per la consegna di una autovettura, che si ottiene con una query simile alla precedente sostituendo l'attributo lit con ggc. Come possiamo notare il risultato della funzione, e' stato calcolato dal rapporto tra il totale dei giorni (797), ed il numero di valori che in quell'attributo sono diversi da NULL (9).

SELECT AVG(ggc)
FROM modello; [29]
AVG(GGC)
----------
88.5555556

L'ultima e non meno importante differenza tra i due insiemi di funzioni, riguarda alcune limitazioni sul loro impiego in una query.

Abbiamo già detto che le espressioni possono comparire dopo SELECT, WHERE, ORDER BY. A questo insieme di comandi aggiungiamo anche le funzioni scalari mentre un discorso a parte, per motivi che saranno chiari nei capitoli successivi, meritano le funzioni di gruppo. Per ora ci limiteremo ad usarle soltanto nella lista che segue SELECT con l'ulteriore limitazione di non poter comparire assieme a nomi di attributi. Allo scopo di chiarire quanto detto, consideriamo il seguente problema: vogliamo conoscere il prezzo medio delle autovetture di lusso accanto al tipo di auto. Non tenendo conto di quanto appena detto, saremmo portati a scrivere una query come la seguente: SELECT uso, avg(lit) FROM modello WHERE uso = 'lusso'; L'esecuzione di tale query, con un messaggio che varia a seconda del software utilizzato, genera un errore dovuto alla presenza di un attributo (uso) insieme ad una funzione di gruppo. La spiegazione di questo errore risiede nel fatto che il calcolo di...

una funzione colonna comporta la "perdita" delle componenti della relazione originale in termini di tuple: comunque non sarà disponibile alcun dato dell'attributo Uso. Vedremo nel prossimo capitolo come evitare questo errore ed ottenere il risultato voluto.

Consideriamo ora il seguente elenco in cui sono riportate le funzioni colonna con gli argomenti che accettano ed i risultati che calcolano:

  • AVG(nome_col) calcola la media
  • COUNT(espressione | *) conta le tuple
  • MAX(espressione) calcola il massimo
  • MIN(espressione) calcola il minimo
  • SUM(nome_col) calcola il totale
  • STDDEV(nome_col) calcola la deviazione standard
  • VARIANCE(nome_col) calcola la varianza

Vogliamo avvertire che la specificazione della parola DISTINCT, opzionale per una qualunque delle precedenti funzioni, esclude dai calcoli i valori già considerati e questo, come vedremo in un esempio, comporterà notevoli differenze nei risultati. Si noti ancora, come tra gli argomenti possano comparire, a seconda della funzione,

un attributo o una espressione.

La prima query, vuole conoscere il valore di cilindrata piu' alto di tutti. Di seguito riportiamo la query ed il risultato ottenuto:

SELECT max(cc)
FROM modello;
[31] MAX(CC)
-------------
4942

Ovviamente la query puo' includere condizioni di vario tipo. In questo caso, prima vengono selezionate le tuple che rispettano la condizione, poi si procede al calcolo della funzione. Nella query [29] viene richiesto il totale dei prezzi di tutte le autovetture di tipo "sportivo". La riportiamo insieme al risultato ottenuto:

SELECT sum(lit)
FROM modello
WHERE uso = 'sport';
[32] SUM(LIT)
--------
424915

Nel prossimo esempio faremo uso della funzione COUNT. Questa funzione in generale conteggia le tuple che compongono una colonna. In particolare, come anticipato in precedenza, la specifica dell'argomento "*", in alternativa ad un attributo, considera anche i valori nulli, e quindi si ricorre a questa forma per contare la cardinalità

SELECT count(DISTINCT categoria)
FROM autovetture;

ed il risultato ottenuto, compaiono nella query [35].

SELECT count(DISTINCT uso)FROM modello; [35]

COUNT(DISTINCT USO)

4

La prossima query dimostra come la specificazione dell'opzione DISTINCT possa influenzare il risultato. La prima query calcola la cilindrata media delle autovetture con cilindrata di 2500 oppure 4942, mentre la successiva effettua gli stessi calcoli escludendo i valori che sono stati gia' conteggiati. Come si puo' vedere i risultati differiscono in modo abbastanza evidente.

Vogliamo far notare che la condizione posta con la WHERE, ha l'unico fine di facilitare i calcoli di controllo.

SELECT avg(cc)FROM modelloWHERE cc IN(2500,4942); [36]

AVG(CC)

3476.8

SELECT avg(DISTINCT cc)FROM modelloWHERE cc IN(2500,4942); [36.1]

AVG(DISTINCT CC)

3721

Dettagli
Publisher
A.A. 2012-2013
7 pagine
SSD Scienze matematiche e informatiche INF/01 Informatica

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher valeria0186 di informazioni apprese con la frequenza delle lezioni di Informatica e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Università degli Studi di Roma La Sapienza o del prof Grande Antonio.