Sottoquery SQL

Nota: Riteniamo importante fornire il contenuto della Guida più recente non appena possibile, nella lingua dell'utente. Questa pagina è stata tradotta automaticamente e potrebbe contenere errori di grammatica o imprecisioni. L'intento è quello di rendere fruibile il contenuto. Nella parte inferiore della pagina è possibile indicare se le informazioni sono risultate utili. Questo è l'articolo in lingua inglese per riferimento.

Una sottoquery è un'istruzione SELECT nidificata all'interno di un'istruzione SELECT, SELECT... IN, INSERIRE... Istruzione INTO, eliminazione o aggiornamento o all'interno di un'altra sottoquery.

Sintassi

È possibile utilizzare tre forme di sintassi per creare una sottoquery:

confronto [QUALSIASI | TUTTI | ALCUNI] (sqlstatement)

espressione [NOT] IN (sqlstatement)

[NOT] EXISTS (sqlstatement)

Una sottoquery è composta dalle parti seguenti:

Parte

Descrizione

confronto

Un espressione e un operatore di confronto che confronta l'espressione con i risultati della sottoquery.

espressione

Un'espressione per il quale viene effettuata la ricerca di set di risultati della sottoquery.

istruzionesql

Un'istruzione SELECT seguendo lo stesso formato e le regole di qualsiasi altra istruzione SELECT. Deve essere racchiuso tra parentesi.


Osservazioni

È possibile utilizzare una sottoquery anziché un'espressione nell'elenco dei campi di un'istruzione SELECT o in una clausola WHERE o HAVING. In una sottoquery utilizzare un'istruzione SELECT per fornire un insieme di uno o più valori specifici da valutare nel WHERE o espressione clausola HAVING.

Predicati ANY o SOME, che sono sinonimi, per recuperare i record nella query principale che soddisfano il confronto con i record recuperati nella sottoquery. Nell'esempio seguente restituisce tutti i prodotti il cui prezzo unitario è maggiore di quello dei prodotti venduti uno sconto al 25% o più:

SELECT * FROM Products WHERE UnitPrice > ANY (SELECT UnitPrice FROM OrderDetails WHERE Discount >= .25);

Predicati tutti per recuperare solo i record nella query principale che soddisfano il confronto con tutti i record recuperati nella sottoquery. Se è stato modificato uno a tutti nell'esempio precedente, la query restituirà solo i prodotti il cui prezzo unitario è maggiore di quello di tutti i prodotti venduti uno sconto del 25%. Questo è molto più restrittivo.

Predicati IN per recuperare solo i record nella query principale per cui alcuni record della sottoquery contiene un valore uguale. Nell'esempio seguente restituisce tutti i prodotti con uno sconto del 25% o più:

SELECT * FROM Products WHERE ProductID IN (SELECT ProductID FROM OrderDetails WHERE Discount >= .25);

È invece possibile utilizzare NOT IN per recuperare solo i record nella query principale per il quale nessun record della sottoquery contiene un valore uguale.

Predicati EXISTS (con facoltativa NOT parola riservata) nei confronti di vero/falso per determinare se la sottoquery restituisce record.

È anche possibile utilizzare gli alias dei nomi di tabella in una sottoquery per fare riferimento alle tabelle elencate in una clausola FROM esterna alla sottoquery. Nell'esempio seguente restituisce i nomi dei dipendenti il cui stipendi sono maggiore o uguale a quello le retribuzioni Media di tutti i dipendenti con la stessa posizione. Nella tabella dipendenti viene assegnata l'alias "T1":

SELECT LastName, FirstName, Title, Salary FROM Employees AS T1 WHERE Salary >= (SELECT Avg(Salary) FROM Employees WHERE T1.Title = Employees.Title) Order by Title;

Nell'esempio precedente, il AS parola riservata è facoltativo.

Alcune sottoquery sono consentite nelle query a campi incrociati, in particolare, come predicati (quelli nella clausola WHERE). Le sottoquery come output (inclusi nell'elenco Seleziona) non sono consentite nelle query a campi incrociati.



Amplia le tue competenze su Office
Esplora i corsi di formazione
Ottieni in anticipo le nuove caratteristiche
Partecipa al programma Office Insider

Queste informazioni sono risultate utili?

Grazie per il feedback!

Grazie per il tuo feedback! Potrebbe essere utile metterti in contatto con uno dei nostri operatori del supporto di Office.

×