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

16 . Il linguaggio SQL Vers . 9.3 – Marzo 2024
( 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