Da A.Marrella Ven Apr 24, 2009 6:44 pm
Prima di tutto, vorrei analizzare due soluzioni alternative (le più gettonate) fornitemi a lezione da alcuni studenti riguardo la domanda 6 dell'esercizio d'esame, ovvero:
6) Estrarre i nomi degli stadi in cui non gioca nessuna nazionale Europea
La prima soluzione che analizziamo è la seguente :
SELECT distinct NomeStadio
FROM Incontro
WHERE Squadra1 not in
(SELECT Paese
FROM Nazionale
WHERE Continente = ‘Europa’)
and
Squadra2 not in
(SELECT Paese
FROM Nazionale
WHERE Continente = ‘Europa’)
Questa soluzione è SCORRETTA perchè non restituisce tutti gli stadi in cui giocano sempre due squadre non europee (che è ciò che viene chiesto nella domanda), ma restituisce quegli stadi in cui almeno una volta giocano due squadre non europee. Se avessimo nella tabella Incontro le seguenti due tuple :
<'Olimpico','2009-07-26','18:00:00','Italia','Germania'>
<'Olimpico','2009-07-26','22:00:00','Brasile','Argentina'>
l'interrogazione inserirebbe erroneamente lo stadio 'Olimpico' nel risultato, nonostante alle 18:00 si giochi Italia-Germania
La seconda soluzione che analizziamo è la seguente :
SELECT distinct NomeStadio
FROM Incontro, Nazionale
WHERE Continente <> ‘Europa’ and (Squadra1=Paese or Squadra2=Paese)
Anche questa soluzione è SCORRETTA perchè non restituisce tutti gli stadi in cui giocano sempre due squadre non europee, ma restituisce quegli stadi in cui una almeno una volta una delle due squadre che gioca deve essere non europea Se avessimo nella tabella Incontro la seguente tupla:
<'Olimpico','2009-07-26','18:00:00','Italia','Brasile'>
il JOIN sarebbe erroneamente soddisfatto da (Squadra2=Paese)