Sottoquery di SQL Server
Riepilogo: in questo tutorial imparerai a conoscere la sottoquery di SQL Server e come utilizzare la sottoquery per eseguire query sui dati.
Introduzione alla sottoquery di SQL Server
Una sottoquery è una query nidificata allinterno di unaltra istruzione come SELECT
, INSERT
, UPDATE
o DELETE
.
Vediamo il seguente esempio.
Considera il orders
e customers
dal database di esempio.
La seguente istruzione mostra come utilizzare una sottoquery nella WHERE
clausola di SELECT
per trovare gli ordini di vendita dei clienti che si trovano in New York
:
Ecco il risultato:
In questo esempio, la seguente istruzione è una sottoquery:
Code language: SQL (Structured Query Language) (sql)
Tieni presente che devi sempre racchiudere SELECT
query di una sottoquery tra parentesi ()
.
Una sottoquery è anche nota come query interna o selezione interna mentre listruzione contenente la sottoquery è chiamata selezione esterna o query esterna:
SQL Il server esegue lintero esempio di query sopra come segue:
In primo luogo, esegue la sottoquery per ottenere un elenco di numeri di identificazione dei clienti che si trovano in New York
.
Code language: SQL (Structured Query Language) (sql)
In secondo luogo, SQL Server sostituisce i numeri di identificazione del cliente restituiti dalla sottoquery nelloperatore IN
ed esegue la query esterna per ottenere il set di risultati finale.
Come puoi s ee, utilizzando la sottoquery, puoi combinare due passaggi insieme. La sottoquery elimina la necessità di selezionare i numeri di identificazione del cliente e di inserirli nella query esterna. Inoltre, la query stessa si regola automaticamente ogni volta che i dati del cliente cambiano.
Sottoquery di nidificazione
Una sottoquery può essere nidificata allinterno di unaltra sottoquery. SQL Server supporta fino a 32 livelli di nidificazione. Considera il seguente esempio:
Primo, SQL Server esegue la seguente sottoquery per ottenere un elenco di numeri di identificazione del marchio dei marchi Strider
e Trek
:
In secondo luogo, SQL Server calcola il listino prezzi medio di tutti i prodotti che appartengono a questi marchi.
Code language: SQL (Structured Query Language) (sql)
Terzo, SQL Server trova i prodotti il cui prezzo di listino è maggiore del prezzo di listino medio di tutti i prodotti con Strider
o Trek
brand.
Tipi di sottoquery di SQL Server
Puoi utilizzare una sottoquery in molti punti:
- Al posto di unespressione
- Con
IN
oNOT IN
- Con
ANY
oALL
- Con
EXISTS
oNOT EXISTS
- In
UPDATE
,DELETE
, oINSERT
istruzione - Nella
FROM
clausola
sottoquery di SQL Server viene utilizzato al posto di unespressione
Se una sottoquery restituisce un singolo valore, può essere utilizzata ovunque venga utilizzata unespressione.
Nellesempio seguente, una sottoquery viene utilizzata come espressione di colonna denominata max_list_price
in unistruzione SELECT
.
La sottoquery di SQL Server viene utilizzata con loperatore IN
Una sottoquery che viene utilizzata con IN
restituisce un insieme di zero o più valori. Dopo che la sottoquery ha restituito i valori, la query esterna li utilizza.
La query seguente trova i nomi di tutti i prodotti per mountain bike e bici da strada venduti dai negozi di biciclette.
Questa query viene valutata in due passaggi:
- Innanzitutto, la query interna restituisce un elenco di numeri di identificazione di categoria che corrispondono ai nomi
Mountain Bikes
ecode
Road Bikes. - In secondo luogo, questi valori vengono sostituiti nella query esterna che trova i nomi dei prodotti che hanno il numero di identificazione della categoria corrispondente a uno dei valori nellelenco.
La sottoquery di SQL Server viene utilizzata con QUALSIASI operatore
La sottoquery viene introdotta con loperatore ANY
ha la seguente sintassi:
Code language: SQL (Structured Query Language) (sql)
Supponendo che la sottoquery restituisca un elenco di valori v1, v2,… vn. Loperatore ANY
restituisce TRUE
se uno di una coppia di confronto (scalar_expression
, vi) valuta a TRUE
; in caso contrario, restituisce FALSE
.
Ad esempio, la seguente query trova i prodotti i cui prezzi di listino sono maggiori o uguali al prezzo di listino medio di qualsiasi marca di prodotto .
Per ogni marca, la sottoquery trova il prezzo di listino massimo. La query esterna utilizza questi prezzi massimi e determina quale prezzo di listino del singolo prodotto è maggiore o uguale al prezzo di listino massimo di qualsiasi marca.
La sottoquery di SQL Server viene utilizzata con loperatore ALL
Il ALL
ha la stessa sintassi delloperatore ANY
:
Code language: SQL (Structured Query Language) (sql)
Loperatore ALL
restituisce TRUE
se tutte le coppie di confronto (scalar_expression
, vi) restituiscono TRUE
; in caso contrario, restituisce FALSE
.
La query seguente trova i prodotti il cui prezzo di listino è maggiore o uguale al prezzo di listino medio restituito dalla sottoquery:
La sottoquery di SQL Server viene utilizzata con EXISTS o NOT ESISTE
Quanto segue illustra la sintassi di una sottoquery introdotta con loperatore EXISTS
:
Code language: SQL (Structured Query Language) (sql)
Loperatore EXISTS
restituisce TRUE
se la sottoquery restituisce risultati; altrimenti restituisce FALSE
.
Daltra parte, NOT EXISTS
è opposto a EXISTS
operatore.
La seguente query trova i clienti che hanno acquistato prodotti nel 2017:
Se utilizzi NOT EXISTS
invece di EXISTS
, puoi trovare i clienti che non hanno acquistato alcun prodotto nel 2017.
Sottoquery di SQL Server nella clausola FROM
Si supponga di voler trovare la media della somma degli ordini di tutto il personale di vendita. Per fare ciò, puoi prima trovare il numero di ordini per staff:
Quindi, puoi applicare la funzione AVG()
a questo set di risultati. Poiché una query restituisce un set di risultati simile a una tabella virtuale, puoi inserire lintera query nella clausola FROM
di unaltra query come questa:
La query che inserisci nel FROM
deve avere un alias di tabella. In questo esempio, abbiamo utilizzato la t come alias di tabella per la sottoquery. Per ottenere il risultato finale, SQL Server esegue i seguenti passaggi:
- Esegui la sottoquery nella clausola
FROM
. - Usa il risultato della sottoquery ed esegui la query esterna.
In questo tutorial, hai imparato il concetto di sottoquery di SQL Server e come utilizzare vari tipi di sottoquery per interrogare i dati.