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 o NOT IN
  • Con ANY o ALL
  • Con EXISTS o NOT EXISTS
  • In UPDATE, DELETE, o INSERT 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:

  1. Innanzitutto, la query interna restituisce un elenco di numeri di identificazione di categoria che corrispondono ai nomi Mountain Bikes e code Road Bikes.
  2. 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.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *