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_NameSalesTxn_Date
Los Angeles150005-Jan-1999
San Diego25007-Jan-1999
Los Angeles30008-Jan-1999
Boston70008-Jan-1999

Tabella Geography
Region_NameStore_Name
EastBoston
EastNew York
WestLos Angeles
WestSan 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 © 2014   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