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

16 . Il linguaggio SQL Vers . 9.3 – Marzo 2024
Query : Visualizzare tutti i fornitori che NON forniscono alcun articolo
Analizziamo dapprima due soluzioni con query annidate e con gli operatori ALL e NOT IN di cui abbiamo già , parlato in precedenza
SELECT Fornitore .* FROM Fornitore WHERE CodF <> ALL ( SELECT DISTINCT CodF1
FROM Fornisce );
SELECT Fornitore .* FROM Fornitore WHERE CodF NOT IN ( SELECT DISTINCT CodF1
FROM Fornisce );
Output della query + ------ + --------- + ---------- + ------------ + | CodF | Cognome | Nome | DataN | + ------ + --------- + ---------- + ------------ + | F _ 04 | BIANCHI | VINCENZO | 1968-11-24 | + ------ + --------- + ---------- + ------------ +
Una soluzione alternativa , più elegante delle precedenti , è offerta dall ’ uso dell ’ operatore NOT EXISTS posto all ’ interno della seguente query annidata :
SELECT Fornitore .* FROM Fornitore WHERE NOT EXISTS ( SELECT * FROM Fornisce WHERE Fornitore . CodF = Fornisce . CodF1 );
Anche se l ’ uso di NOT EXISTS è facilmente comprensibile , ciò che può risultare meno intuitivo è il modo in cui la subquery è correlata con la query principale : all ’ interno della clausola WHERE , infatti , abbiamo utilizzato il campo CodF della tabella Fornitore . Ciò implica che la subquery dovrà essere eseguita con un parametro diverso per ogni riga estratta dalla query esterna . Il risvolto pratico è un significato degrado delle prestazioni : in questi casi è sempre meglio preferire soluzioni alternative , considerato come abbiamo visto anche in questo caso , che le subquery correlate possono essere trasformate con subquery più " performanti " ( in questo caso ALL e NOT IN ).
Autore : Rio Chierego ( email : riochierego @ libero . it - sito web : www . riochierego . it ) Pag . 55