|
Home -> Manuali e Tutorials -> Guida MySQL Database -> Subquery MySQL
Scarica il tutorial | Stampa il tutorial | Cerca nel sito
Le subquery
Una subquery non è altro che una SELECT all'interno di un'altra istruzione. Le subquery possono essere nidificate a qualsiasi livello. A differenza delle SELECT, che restituiscono una tabella formata da righe e colonne, le subquery possono restituire un valore singolo (scalare), una singola riga, una singola colonna, oppure una normale tabella.
La subquery come operando scalare
Il caso più semplice di subquery è quella che restituisce un singolo valore. La si può usare al posto di qualsiasi valore:
SELECT colonna1 FROM nome_tabella1
WHERE colonna1 = (SELECT MAX(colonna2) FROM nome_tabella2);
|
Questa query estrae i valori di colonna1 nella tabella nome_tabella1 che sono uguali al valore massimo di colonna2 nella tabella nome_tabella2.
Subquery che restituiscono colonne
Quando una subquery restituisce una colonna, può essere usata per fare confronti attraverso gli operatori ANY, SOME, IN e ALL:
| SELECT s1 FROM nome_tabella1 WHERE s1 > ANY (SELECT s1 FROM nome_tabella2);
|
Questa query seleziona da nome_tabella1 i valori di s1 che sono maggiori di almeno 1 dei valori di s1 su nome_tabella2.
Subquery che restituiscono righe
Quando una subquery restituisce una singola riga, può essere usata per fare confronti attraverso i costruttori di righe:
SELECT colonna1,colonna2 FROM nome_tabella1
WHERE (colonna1,colonna2) IN (SELECT colonna1,colonna2 FROM nome_tabella2); |
Questa query estrae le righe di nome_tabella1 in cui i valori di colonna1 e colonna2 sono ripetuti in una riga di nome_tabella2. L'espressione "(colonna1,colonna2)" è, appunto, un costruttore di riga.
Subquery correlate
Le subquery correlate sono quelle che contengono un riferimento ad una tabella che fa parte della query esterna:
SELECT * FROM nome_tabella1 WHERE colonna1 = ANY
(SELECT colonna1 FROM nome_tabella2 WHERE nome_tabella2.colonna2 = nome_tabella1.colonna2);
|
In questa subquery, la clausola WHERE contiene un riferimento alla tabella nome_tabella1, che tuttavia non è nominata nella clausola FROM della subquery stessa: la troviamo infatti nella FROM della query esterna.
Subquery nella FROM
E' possibile utilizzare una subquery anche nella clausola FROM, con questa sintassi:
| SELECT ... FROM (subquery) AS nome ... |
Notate che è obbligatorio assegnare un nome alla subquery, per poterla referenziare nelle altre parte della query.
Torna su | Indice Guida | Pagina << 11 >>
|