Query annidate

strumento sintattico per effettuare interrogazioni complesse sui database

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

modifica

Esempio di una subquery che restituisce un solo valore:

select * 
from Dipendenti 
where età>(Select AVG(età) 
from Dipendenti)

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:

select * 
from Studenti
where matricola Not in (Select DISTINCT rif_matricola from Esami)

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

modifica

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:

  1. COUNT() per contare i record;
  2. SUM() per sommare i valori della colonna prescelta;
  3. AVG() per calcolare la media aritmetica dell'attributo numerico prescelto;
  4. MAX() per ottenere il valore massimo dell'attributo numerico prescelto;
  5. MIN() per ottenere il valore minimo dell'attributo numerico prescelto.

Subquery con tabelle derivate

modifica

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:

select MAX(tot_salario)
from (select SUM(salario) as tot_salario
   from Lavoratori
   group by settore);

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

modifica

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:

Transform COUNT(*) 
select classe
from Studenti
group by classe

Questa query a campi incrociati permette di contare per ogni classe il numero di studenti e il numero di studentesse.

Voci correlate

modifica

Collegamenti esterni

modifica
  Portale Informatica: accedi alle voci di Wikipedia che trattano di informatica