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

16. Il linguaggio SQL Vers. 11.0 – Gennaio 2026
( 2) IN e NOT IN vengono utilizzati nelle condizioni delle query del tipo
SELECT < Lista Attributi > FROM < ListaTabelle > WHERE < Attributo > IN | NOT IN(< SubQuery >);
- IN: la condizione della clausola WHERE è vera se il valore dell’ attributo < Attributo > appartiene all’ insieme dei valori forniti dalla sottoquery < SubQuery >( N. B. il predicato IN equivale a = ANY);
- NOT IN: la condizione della clausola WHERE è vera se il valore dell’ attributo < Attributo > non appartiene all’ insieme dei valori forniti dalla sottoquery < SubQuery >.( N. B. il predicato NOT IN equivale a <> ALL);
N. B. Ovviamente la sottoquery < SubQuery > prevede la selezione su un unico attributo Esempio: Consideriamo ancora una volta 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 IN( 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 NOT IN( SELECT Cognome
FROM Attore);
( 3) EXISTS e NOT EXISTS vengono utilizzati nelle condizioni delle query del tipo
SELECT < Lista Attributi > FROM < ListaTabelle > WHERE EXISTS | NOT EXISTS(< SubQuery >);
dove la condizione:
- EXISTS: la condizione della clausola WHERE è vera se la sottoquery < SubQuery > produce una tabella non vuota;
- NOT EXISTS: la condizione della clausola WHERE è vera se la sottoquery < SubQuery > produce una tabella vuota( senza alcuna riga).
N. B. La sottoquery < SubQuery > può prevedere la presenza di più righe e colonne
Autore: Rio Chierego( email: riochierego @ libero. it- sito web: www. riochierego. it) Pag. 53