Si applica a
Access per Microsoft 365 Access 2024 Access 2021 Access 2019 Access 2016

Una sottoquery è un'istruzione SELECT annidata all'interno di select, SELECT... IN, INSERISCI... ISTRUZIONE INTO, DELETE o UPDATE o all'interno di un'altra sottoquery.

Sintassi

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

confronto [ANY | ALL | SOME] (istruzione sql)

espressione [NOT] IN (istruzione sql)

[NON] EXISTS (istruzione sql)

Una sottoquery è composta da queste parti:

Parte

Descrizione

Confronto

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

espressione

Espressione per cui viene eseguita la ricerca nel set di risultati della sottoquery.

istruzionesql

Un'istruzione SELECT, che segue lo stesso formato e le stesse regole di qualsiasi altra istruzione SELECT. Deve essere racchiuso tra parentesi.

Note

È possibile usare una sottoquery invece di un'espressione nell'elenco dei campi di un'istruzione SELECT o in una clausola WHERE o HAVING. In una sottoquery si usa un'istruzione SELECT per fornire un set di uno o più valori specifici da valutare nell'espressione della clausola WHERE o HAVING.

Usare il predicato ANY o SOME, sinonimo, per recuperare record nella query principale che soddisfano il confronto con tutti i record recuperati nella sottoquery. L'esempio seguente restituisce tutti i prodotti il cui prezzo unitario è maggiore di quello di qualsiasi prodotto venduto con uno sconto del 25% o più:

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

Usare il predicato ALL per recuperare solo i record della query principale che soddisfano il confronto con tutti i record recuperati nella sottoquery. Se nell'esempio precedente è stato eseguita la modifica di QUALSIASI in TUTTI, la query restituirà solo i prodotti il cui prezzo unitario è maggiore di quello di tutti i prodotti venduti con uno sconto del 25% o più. Questo è molto più restrittivo.

Usare il predicato IN per recuperare solo i record nella query principale per cui alcuni record nella sottoquery contengono un valore uguale. L'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);

Al contrario, è possibile usare NOT IN per recuperare solo i record nella query principale per cui nessun record nella sottoquery contiene un valore uguale.

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

È anche possibile usare gli alias dei nomi di tabella in una sottoquery per fare riferimento alle tabelle elencate in una clausola FROM all'esterno della sottoquery. L'esempio seguente restituisce i nomi dei dipendenti i cui stipendi sono uguali o maggiori dello stipendio medio di tutti i dipendenti con la stessa posizione lavorativa. Alla tabella Dipendenti viene assegnato 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 la parola riservata AS è facoltativa.

Alcune sottoquery sono consentite nelle query a campi incrociati, in particolare come predicati (quelle della clausola WHERE). Le sottoquery come output (quelle nell'elenco SELECT) non sono consentite nelle query a campi incrociati.

Serve aiuto?

Vuoi altre opzioni?

Esplorare i vantaggi dell'abbonamento e i corsi di formazione, scoprire come proteggere il dispositivo e molto altro ancora.