SQL Sottoquery




  SQL > SQL Avanzato > Sottoquery

In SQL, è possibile inserire un’istruzione all’interno di un’altra. Quando ciò accade nelle istruzioni WHERE o HAVING, si ha un costrutto di sottoquery.

La sintassi è la seguente:

SELECT "nome_di_colonna_1"
FROM "nome_della_tabella_1"
WHERE "nome_di_colonna_2" [operatore di confronto]
(SELECT "nome_di_colonna_3"
FROM "nome_della_tabella_2"
WHERE [condizionale]
)

[operatore di confronto] potrebbero essere operatori di uguaglianza come, ad esempio: =, >, <, >=, <=. Potrebbe anche essere un operatore di testo del tipo "LIKE". La parte in rosso è considerata come la “query interna”, mentre la parte in verde la "query esterna ".

Si proceda utilizzando lo stesso esempio utilizzato nel paragrafo relativo alle unioni nel linguaggio SQL:

Tabella Store_Information
store_name Sales Date
Los Angeles 1500 € 05-Jan-1999
San Diego 250 € 07-Jan-1999
Los Angeles 300 € 08-Jan-1999
Boston 700 € 08-Jan-1999

Tabella Geography
region_name store_name
East Boston
East New York
West Los Angeles
West San Diego

Si desidera utilizzare una sottoquery per trovare le vendite di tutti i negozi presenti nella regione Ovest. Per realizzare questa operazione si utilizza la seguente istruzione SQL:

SELECT SUM(Sales) FROM Store_Information
WHERE Store_name IN
(SELECT store_name FROM Geography
WHERE region_name = 'West')

Risultato:

SUM(Sales)
2050

In questo esempio, anziché unire direttamente le due tabelle e aggiungere successivamente solo la quantità di vendite per i negozi della regione Ovest, si utilizza prima una sottoquery per trovare quali negozi si trovano nella regione Ovest, quindi si realizza la somma della quantità delle vendite realizzate in questi negozi.

Nell’esempio precedente, la query interna viene eseguita per prima e il suo risultato viene introdotto nella query esterna. Questo tipo di sottoquery viene denominato sottoquery semplice. Se la query interna dipende da quella esterna, si avrà una sottoquery correlata. Di seguito, viene mostrato un esempio di sottoquery correlata:

SELECT SUM(a1.Sales) FROM Store_Information a1
WHERE a1.Store_name IN
(SELECT store_name FROM Geography a2
WHERE a2.store_name = a1.store_name)

Si noti la clausola WHERE presente nella query interna, in cui la condizione implica una tabella presente nella query esterna.

SQL EXISTS >>




Copyright © 2013   1keydata.com   Tutti i diritti riservati.



SQL Avanzato
SQL UNION
SQL UNION ALL
SQL INTERSECT
SQL MINUS
SQL Sottoquery
SQL EXISTS
SQL CASE
SQL NULL
SQL ISNULL
SQL IFNULL
SQL NVL
SQL COALESCE
SQL NULLIF




Indice del sito