# Query annidate

Le query annidate, in informatica, nell'ambito dei linguaggi di interrogazione, rappresentano uno strumento sintattico molto importante per effettuare interrogazioni complesse sui database.
In generale l'interrogazione di un database è una delle operazioni che viene effettuata con maggiore frequenza. Un'interrogazione nidificata (o subquery) è una query che sta all'interno di un'altra interrogazione: la query interna, cioè la subquery, passa i risultati alla query esterna che li verifica nella condizione che segue la clausola Where. Esistono vari tipi di subquery, ma principalmente si possono suddividere in subquery che restituiscono un solo valore e subquery che restituiscono un insieme di valori.

## Descrizione

Esempio di una subquery che restituisce un solo valore:
La query restituisce tutti i Dipendenti la cui età supera l'età media di tutti i dipendenti. Il compito di andare a calcolare questa media è svolto dalla query interna (subquery), però si suppone di avere un database con all'interno la tabella Dipendenti con i relativi attributi o campi.
Esempio di una subquery che restituisce un insieme di valori:
La query restituisce tutti gli Studenti che non hanno mai sostenuto un esame, la subquery invece ricerca tutte le matricole degli Studenti che hanno sostenuto almeno un esame. La clausola Distinct permette di eliminare la ripetizione delle matricole degli Studenti che hanno sostenuto più di un esame.

### Gli operatori aggregati

Gli operatori aggregati (o funzioni di aggregazione) sono di fondamentale importanza per effettuare subquery complesse. Questi operatori si caratterizzano per il fatto di restituire un valore in corrispondenza di un gruppo di valori o dei valori che formano una colonna di una tabella contenuta in un database. Nella maggior parte dei Query language, tra cui SQL, i più importanti sono:
* COUNT per contare i record;
* SUM per sommare i valori della colonna prescelta;
* AVG per calcolare la media aritmetica dell'attributo numerico prescelto;
* MAX per ottenere il valore massimo dell'attributo numerico prescelto;
* MIN per ottenere il valore minimo dell'attributo numerico prescelto.

### Subquery con tabelle derivate

Una tabella derivata è una tabella che viene creata durante l'esecuzione della query esterna, quindi è un semplice result-set, cioè un insieme di tuple (o record) ottenute da una query. Essa rappresenta un tipo speciale di subquery, posizionata nella clausola From della query ed è referenziata tramite un alias.
Esempio di una subquery con tabelle derivate:
Questa query, tramite la subquery nella clausola From, permette di estrapolare dalla tabella Lavoratori il salario più alto della somma dei salari tra tutti i settori.

### Query a campi incrociati

Le query a campi incrociati permettono di calcolare una somma, una media, un conteggio o altri tipi di operazioni di aggregazione su alcuni attributi. Occorre specificare che questo tipo di interrogazione non è presente in MySQL, ma è presente invece nel linguaggio SQL per Access. Le query a campi incrociati permettono di raggruppare le tuple in base a due campi: il primo rappresenterà le colonne delle tuple risultato, mentre il secondo rappresenterà le righe.
Esempio di una query a campi incrociati:
Questa query a campi incrociati permette di contare per ogni classe il numero di studenti e il numero di studentesse.