0 valutazioniIl 0% ha trovato utile questo documento (0 voti)
14 visualizzazioni
SQL Sub
Il documento descrive le sottointerrogazioni in SQL, spiegando come una query può contenere un'altra query (subquery) nella clausola WHERE per determinare valori da confrontare. Vengono forniti esempi di uso di subquery scalari e tabelle con operatori ANY ed ALL.
Scarica in formato PDF, TXT o leggi online su Scribd
0 valutazioniIl 0% ha trovato utile questo documento (0 voti)
14 visualizzazioni
SQL Sub
Il documento descrive le sottointerrogazioni in SQL, spiegando come una query può contenere un'altra query (subquery) nella clausola WHERE per determinare valori da confrontare. Vengono forniti esempi di uso di subquery scalari e tabelle con operatori ANY ed ALL.
Scarica in formato PDF, TXT o leggi online su Scribd
Sei sulla pagina 1/ 13
SQL - Sottointerrogazioni
una delle ragioni che rendono SQL un linguaggio
potente è la possibilità di esprimere interrogazioni più complesse in termini di interrogazioni più semplici, tramite il meccanismo delle subqueries (sottointerrogazioni) la clausola WHERE di una query (detta query esterna) può infatti contenere un'altra query (detta subquery) la subquery viene usata per determinare uno o più valori da usare come valori di confronto in un predicato della query esterna
121 Linguaggio SQL
SQL - Sottointerrogazioni
esempio: si vuole elencare tutti gli impiegati che
hanno la stessa mansione dell'impiegato di nome Gianni SELECT Nome, Mansione FROM Impiegati WHERE Mansione = (SELECT Mansione FROM Impiegati WHERE Nome = 'Gianni');
– HP: Nome deve essere chiave
– la subquery restituisce come valore 'ingegnere’ – la query esterna determina quindi tutti gli impiegati che sono ingegneri – il risultato è 122 {Rossi, Neri, Dare, Adami, Gianni, Milli} Linguaggio SQL SQL - Sottointerrogazioni
tramite il meccanismo delle subqueries è possibile
esprimere queries anche più complesse esempio: si vuole elencare tutti gli impiegati che hanno uno stipendio superiore alla media degli stipendi di tutti gli impiegati SELECT Nome, Stipendio FROM Impiegati WHERE Stipendio > (SELECT AVG(Stipendio) FROM Impiegati);
123 Linguaggio SQL
SQL - Sottointerrogazioni
risultato Nome Stipendio
Rosi 2975,00 Blacchi 2850,00 Neri 2450,00 Dare 2000,00 Gianni 1950,00 Verdi 3000,00 è possibile per una subquery avere al suo interno un'altra subquery, predicati di join, e tutti i predicati visti le subqueries possono essere usate anche all'interno dei comandi di manipolazione dei dati (Insert, Delete, Update) li vedremo più avanti 124 Linguaggio SQL SQL - Sottointerrogazioni
negli esempi visti, le subqueries restituiscono un solo
valore tali subqueries sono note come subqueries scalari se una subquery scalare restituisce più di una tupla si genera un errore a run-time una particolarità delle subqueries scalari è che se nessuna tupla verifica la subquery, viene restituito il valore NULL se si vuole invece utilizzare una subquery che restituisce più valori (table subquery) è necessario specificare come i valori restituiti devono essere usati nella clausola WHERE 125 Linguaggio SQL SQL - Sottointerrogazioni
a tale scopo vengono usati i quantificatori ANY ed ALL,
che sono inseriti tra l'operatore di confronto e la subquery (esiste anche SOME, sinonimo di ANY) esempio: determinare lo stipendio, la mansione, il nome e il numero di dipartimento degli impiegati che guadagnano più di almeno un impiegato del dipartimento 30 SELECT Stipendio, Mansione, Nome, Dip# FROM Impiegati WHERE Stipendio > ANY (SELECT Stipendio FROM Impiegati WHERE Dip#=30);
se si usa il quantificatore ALL, la query restituisce gli
impiegati il cui stipendio è maggiore di tutti i valori restituiti dalla subquery 127 Linguaggio SQL SQL - Sottointerrogazioni
esempio: determinare lo stipendio, la mansione, il
nome e il numero di dipartimento degli impiegati che guadagnano più di tutti gli impiegati del dipartimento 30 SELECT Stipendio, Mansione, Nome, Dip# FROM Impiegati WHERE Stipendio > ALL (SELECT Stipendio FROM Impiegati WHERE Dip#=30); – risultato Stipendio Mansione Nome Dip# 3000,00 dirigente Verdi 10 2975,00 dirigente Rosi 20
128 Linguaggio SQL
SQL - Sottointerrogazioni
sono definite le seguenti abbreviazioni per ANY ed ALL
– IN equivalente ad = ANY – NOT IN equivalente a ≠ ALL esempio: elencare il nome e la mansione degli impiegati del dipartimento 10 che hanno la stessa mansione di un qualche impiegato del dipartimento 30
SELECT Nome, Mansione FROM Impiegati
WHERE Dip#=10 AND Mansione IN (SELECT Mansione FROM Impiegati WHERE Dip#=30); 129 Linguaggio SQL SQL - Sottointerrogazioni
esempio (2): elencare il nome e la mansione degli
impiegati del dipartimento 10 che hanno una qualche mansione non presente nel dipartimento 30 SELECT Nome, Mansione FROM Impiegati WHERE Dip#=10 AND Mansione NOT IN (SELECT Mansione FROM Impiegati WHERE Dip#=30); – risultato risultato (2) Mansione Nome Mansione Nome dirigente Verdi tecnico Andrei ingegnere Dare tecnico Bianchi ingegnere Milli tecnico Turni segretaria Martini
130 Linguaggio SQL
SQL - Sottointerrogazioni
è inoltre possibile selezionare più di una colonna
tramite una sottointerrogazione; in tal caso è necessario apporre delle parentesi alla lista delle colonne a sinistra dell'operatore di confronto esempio: si vuole elencare gli impiegati con la stessa mansione e stipendio di Martini
SELECT Nome FROM Impiegati
WHERE (Mansione,Stipendio) = (SELECT Mansione, Stipendio FROM Impiegati WHERE Nome = 'Martini');
131 Linguaggio SQL
SQL - Sottointerrogazioni
la clausola di WHERE di una query può contenere una
qualsiasi combinazione di condizioni normali e condizioni con subqueries esempio: si vuole elencare gli impiegati con la stessa mansione di Gianni o con uno stipendio maggiore o uguale a quello di Fordi, ordinando il risultato in base alla mansione e allo stipendio SELECT Nome, Mansione, Stipendio FROM Impiegati WHERE Mansione = (SELECT Mansione FROM Impiegati WHERE Nome ='Gianni') OR Stipendio > (SELECT Stipendio FROM Impiegati WHERE Nome = 'Fordi') ORDER BY Mansione, Stipendio; 132 Linguaggio SQL SQL - Sottointerrogazioni
una subquery può contenere a sua volta un'altra
subquery esempio: elencare il nome e la mansione degli impiegati del dipartimento 10 con la stessa mansione di un qualche impiegato del dipartimento Ricerche SELECT Nome, Mansione FROM Impiegati WHERE Dip#=10 AND Mansione IN (SELECT Mansione FROM Impiegati WHERE Dip# = (SELECT Dip# FROM Dipartimenti WHERE Nome_Dip = 'Ricerche’));