Docsity
Docsity

Prepara i tuoi esami
Prepara i tuoi esami

Studia grazie alle numerose risorse presenti su Docsity


Ottieni i punti per scaricare
Ottieni i punti per scaricare

Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium


Guide e consigli
Guide e consigli


interrogazioni annidate in sql, Dispense di Informatica

power point di introduzione alle query annidate scalri

Tipologia: Dispense

2019/2020

Caricato il 21/04/2020

giusi_orrico
giusi_orrico 🇮🇹

1 documento

1 / 33

Toggle sidebar

Questa pagina non è visibile nell’anteprima

Non perderti parti importanti!

bg1
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21

Anteprima parziale del testo

Scarica interrogazioni annidate in sql e più Dispense in PDF di Informatica solo su Docsity!

Le interrogazioni

annidate

Le interrogazioni nidificate rappresentano uno strumento valido per effettuare interrogazioni complesse, che non possono essere realizzate con i comandi SQL visti finora. In pratica, un’interrogazione nidificata non è altro che un’interrogazione che permette il confronto tra uno o più attributi e il risultato di una sottointerrogazione.

Le interrogazioni annidate

Le query annidate sono query scritte

una dentro l’altra ed elaborate

secondo un preciso ordine temporale.

Cominciamo col vedere le query

annidate di tipo scalare.

Vedremo poi quelle con i

quantificatori All, Any e Some.

Infine quelle con la quantificazione

esistenziale EXISTS.

funzionamento 

La query che si trova tra le parentesi

tonde, chiamata anche select interna

o query annidata o subquery, viene

eseguita per prima;

Sulla base del risultato, viene

eseguita l’altra query, chiamata

anche Select esterna o principale.

esempio 1- codice SELECT cognome_madre, nome_madre FROM Maternità WHERE nome_figlio = ( SELECT nome_figlio FROM Paternità WHERE cognome_padre=”Colombo” and nome_padre=”Piero”);

esempio 2- codice In questo esempio vediamo come usare una query anniadata per verificare quali padri hanno avuto meno figli di «Corelli Lina» La query è la seguente: SELECT cognome_padre, nome_padre, COUNT() AS figli FROM paternità GROUP BY cognome_padre, nome_padre HAVING COUNT()< ( SELECT COUNT(*) FROM Maternità WHERE cognome_madre=”Corelli” and nome_madre=”Lina”);

esempio 2- spiegazione Poi la clausola having estrae da questa tabella solo le righe che riguardano i papà il cui numero di figli è inferiore al numero restituito dalla subquery. SELECT cognome_padre, nome_padre, COUNT() AS figli FROM paternità query esterna GROUP BY cognome_padre, nome_padre HAVING COUNT()< clausola having ( SELECT COUNT(*) FROM Maternità subquery WHERE cognome_madre=”Corelli” and nome_madre=”Lina”); Nota: nella clausola having avremmo potuto scrivere

esempio 3 L’operazione di nidificazione può anche essere effettuata in riferimento a differenti condizioni nella stessa query. Vediamo un esempio in riferimento alle tabelle Maternità e Paternità… Si vuole conoscere il nome e cognome della nonna da parte di padre di “Valli Mario”…

esempio 3 - spiegazione Per prima cosa viene eseguita la subquery gialla da cui ricaviamo il cognome del padre di Valli Mario: ( SELECT cognome_padre FROM Paternità WHERE cognome_figlio=”Valli” and nome_figlio=”Mario”) Poi con la subquery rosa estraiamo il nome del padre di Valli Mario ( SELECT nome_padre FROM Paternità WHERE cognome_figlio=”Valli” and nome_figlio=”Mario”);

esempio 3 - spiegazione A questo punto può essere eseguita la query più esterna che ,utilizzando nella where i valori ottenuti dalle subquary , restituirà cognome e nome della nonna ovvero : Porta Piera.

  • esempio
  • esempio

esempio 4 

Se volessimo conoscere il cognome e

il nome di tutti i dipendenti che

hanno stipendio inferiore alla media

di quelli con mansione 9, ma

superiore alla media di quelli con

mansione 10, dovremmo applicare le

conoscenze acquisite in campo di

condizioni multiple, viste

nell’esempio precedente:

esempio 4 - codice

Si ottiene il seguente risultato:

Le interrogazioni annidate

 Come abbiamo già detto, sono definite query scalari quelle il cui risultato coincide con un unico valore.  (^) Tale valore si può utilizzare nella condizione where della query più esterna , in sotituzione di un valore costante.  (^) E se la query interna generasse più valori per il medesimo attibuto? In questi casi si possono utilizzare i quantificatori All, Any e Some che ci permettono il confronto tra un attributo e una serie di valori..  (^) Vediamo un esempio….