16. Il linguaggio SQL Vers. 11.0 – Gennaio 2026
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