5° Anno TEORIA 4. Introduzione al linguaggio SQL | 页面 52

16. Il linguaggio SQL Vers. 11.0 – Gennaio 2026
SOTTOINTERROGAZIONI( SUBQUERY) che producono valori appartenenti ad un insieme
Nella costruzione delle sottointerrogazione( o sottoquery o subquery) è possibile utilizzare i seguenti predicati per effettuare ricerche sui valori di attributi che soddisfano proprietà di appartenenza a insiemi di valori.
I possibili predicati che possiamo utilizzare sono:( 1) ANY e ALL;( 2) IN e NOT IN;( 3) EXISTS e NOT EXISTS
( 1) ANY e ALL vengono utilizzati nelle condizioni delle query del tipo
SELECT < Lista Attributi > FROM < ListaTabelle > WHERE < Attributo > < OperatoreDiConfronto > ANY | ALL(< SubQuery >);
dove < OperatoreDiConfronto > è uno tra <, >, ≤, ≥, =, <>, ed
- ANY indica che la condizione della clausola WHERE è vera se il valore dell’ attributo < Attributo > compare in almeno uno dei valori restituiti dalla sottoquery < SubQuery >
- ALL indica che la condizione della clausola WHERE è vera se il valore dell’ attributo < Attributo > compare in tutti quelli restituiti dalla sottoquery < SubQuery >
N. B. Ovviamente la sottoquery < SubQuery > prevede la selezione su un unico attributo Esempio: Consideriamo le seguenti relazioni Regista( CodRegista, Cognome, Nome) Attore( CodAttore, Cognome, Nome) Per ottenere i registi che sono anche attori scriveremo( quindi Regista ∩ Attore)
Nel caso non funzioni l’ operatore INTERSECT( caso MySql) non resta che intraprendere la strada di una query annidata( subquery) in grado di fornire gli stessi risultati( logicamente equivalente):
( SELECT Cognome, Nome FROM Regista) INTERSECT( SELECT Cognome, Nome FROM Attore);
# alternativa con SUBQUERY( Occhio questa query controlla solo il Cognome, non il Nome)
SELECT Cognome, Nome FROM Regista WHERE Cognome = ANY( SELECT Cognome
FROM Attore);
Per ottenere i registi che NON sono anche attori scriveremo( quindi Regista- Attore)
Nel caso non funzioni l’ operatore MINUS( caso MySql) non resta che intraprendere la strada di una query annidata( subquery) in grado di fornire gli stessi risultati( logicamente equivalente):
( SELECT Cognome, Nome FROM Regista) MINUS( SELECT Cognome, Nome FROM Attore);
# alternativa con SUBQUERY( Occhio questa query controlla solo il Cognome, non il Nome)
SELECT Cognome, Nome FROM Regista WHERE Cognome <> ALL( SELECT Cognome
FROM Attore);
Autore: Rio Chierego( email: riochierego @ libero. it- sito web: www. riochierego. it) Pag. 52