Lezione Sql Sub Query

Preview:

DESCRIPTION

subquery inner query simple queries

Citation preview

Lezione SQL-SubQuery 1

Prof. Silvano Natalizi – classe VA – Liceo Tecnico – Gennaio 2009

Che cosa è una SubQuery ? Una SubQuery è una query SELECT interna

(nested/nidificata) ad un’altra query di tipo SELECT o INSERT o UPDATE o DELETE

È usata per creare della informazione richiesta dalla query esterna (principale)

Una subquery può contenere altre query nidificate al suo interno. Questa nidificazione può proseguire per molti livelli (all’infinito)

Quando è necessaria una subquery?

Quano non è possibile ricavare direttamente da nessuna tabella la risposta al quesito posto, se prima non si risponde, con l’uso della SELECT, ad un’altra domanda.

Ad esempio, per scrivere una SELECT che ci permetta di conoscere i voti dello studente la cui media dei voti è la più alta.

Sintassi della SubQuery La sintassi della subquery è la medesima di

una normale SELECT La subquery è sempre racchiusa tra una

coppia di parentesi tonde Una subquery non termina con il punto e

virgola Non usare la clausola ORDER BY all’interno di

una subquery

Quale query è valutata per prima ? La query interna è valutata per prima, poi

quella esterna

Come si creano le subquery Main query: prima query che appare nel

comando SELECT La Subquery restituisce i valori che vengono

usati nella query principale

Come si scrive in pratica una subquery Di solito una subquery appare dopo la

clausola WHERE al seguente modo: WHERE test_expr [NOT] IN (subquery) WHERE test_expr op ALL (subquery) WHERE test_expr op ANY (subquery) WHERE test_expr op (subquery) WHERE [NOT] EXISTS (subquery) test_expr è un valore, il nome di una colonna,

un’espressione Op è un operatore di confronto

(=,<>,<,<=,>,>=)

Che cosa restituiscono le subquery

Bisogna essere consapevoli, di volta in volta, di quali dati sono restituiti da una query nidificata

Le query nidificate possono restituire un valore singolo o valori multipli: To match valori singoli usa l’operatore = To macth valori multipli usa l’operatore IN

Query semplici o non correlate Una query semplice è quella che viene

valutatua indipendentemente dalla sua query esterna ed è elaborata solo una volta.

Una query correlata invece dipende dai dati della query esterna.

In questa lezione ci limitiamo a studiare le query interne semplici.

Esempio di subquery: enunciato del problema Risolviamo il problema di trovare tutti i voti degli

studenti inferiori al voto medio di tutti gli studenti.

Come si fa ? Il voto medio non esiste nella tabella voto, perché

è un attributo derivato da calcolare con la funzione aggregata avg(voto).

Pertanto prima di rispondere alla domanda posta, occore avere il dato voto medio che ci viene restituito da una prima query

Possiamo pertanto utilizzare due query: Una prima query interna che ci restituisce il valor

medio del voto ed una query esterna che ricava tutti i voti che siano inferiori a questo valor medio

Esempio di subquery: soluzione del problema La query interna si scrive così:

(SELECT avg(voto) FROM voto ) La query esterna si scrive così:

SELECT idStudente,idmateria, voto, FROM voto WHERE voto<(…);

Mettendo insieme le due query otteniamo: SELECT idStudente,idmateria, voto FROM voto

WHERE voto<(SELECT avg(voto) FROM voto ) ORDER BY idStudente;

Esecuzione della subquery

Se si vuole sapere quanti sono i voti maggiori del voto medio ? Minori ? La query interna non cambia. Quella esterna invece ha la funzione aggregata

count(voto): Pertanto avremo:

SELECT count(voto) as ‘numero voti minori media’ FROM voto WHERE voto<(SELECT avg(voto) FROM voto);

come vediamo dal risultato dell’esecuzione di questa subquery, abbiamo 7 voti inferiori alla media

Questo risultato ci conforta, perché se contiamo le righe del risultato della precedente subquery, troviamo proprio 7!

CONTINUA…

Recommended