5° Anno TEORIA 4. Introduzione al linguaggio SQL | Página 54

16. Il linguaggio SQL Vers. 11.0 – Gennaio 2026
Esempio: si consideri, ancora una volta, l’ esempio discusso a lezione, reperibile all’ url
http:// www. riochierego. it / mobile / docs / quinta / lab / ESERCITAZIONE-db-esempio-CON-STORICO- FORNITORE-FORNISCE-ARTICOLO-SOLO-TESTO-QUERY-ALUNNO. pdf
in cui risultano presenti le seguenti relazioni: Fornitore( CodF, Cognome, Nome, DataN) Articolo( CodA, Descrizione, Prezzo) Fornisce( IdF, CodF1, CodA1, DataF, Qta)
con l’ attributo " CodF1 " della relazione " Fornisce " che risulta essere chiave esterna o foreign key( o FK) sull’ attributo " CodF " della relazione " Fornitore " con l’ attributo " CodA1 " della relazione " Fornisce " che risulta essere chiave esterna o foreign key( o FK) sull’ attributo " CodA " della relazione " Articolo "
Query: Visualizzare tutti i fornitori che forniscono un qualche articolo
Una prima soluzione consisterebbe nell’ effettuare un EQUI-JOIN tra le tabelle Fornitore e Fornisce eliminando le eventuali ennuple duplicate in quanto occorre tenere presente che un fornitore può fornire in generale più articoli. Quindi:
SELECT DISTINCT Fornitore.* FROM Fornitore, Fornisce WHERE( Fornitore. CodF = Fornisce. CodF1);
Una soluzione alternativa è offerta proprio dall’ uso dell’ operatore EXISTS posto all’ interno della seguente query annidata:
SELECT Fornitore.* FROM Fornitore WHERE EXISTS( SELECT * FROM Fornisce WHERE Fornitore. CodF = Fornisce. CodF1);
Output della query +------ +--------- +-------- +------------ + | CodF | Cognome | Nome | DataN | +------ +--------- +-------- +------------ + | F _ 01 | ROSSI | MARIO | 1965-01-01 | | F _ 02 | GIALLI | ANDREA | 1960-08-08 | | F _ 03 | ROSSI | ELIA | 1963-07-03 | +------ +--------- +-------- +------------ +
Anche se l’ uso di 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 in operazioni di EQUI-JOIN o simili.
Autore: Rio Chierego( email: riochierego @ libero. it- sito web: www. riochierego. it) Pag. 54