Fra92 ha scritto:
a)Trovare gli attori che hanno recitato per il regista che ha diretto il maggior numero di film
SOLUZIONE A:
SELECT A.CF
FROM Attore A, Recita, R, Film F, Dirige D
WHERE D.CF IN ( SELECT D1.CF
FROM Dirige D1
GROUP BY D1.CF
HAVING COUNT(D1.Titolo) >= ALL (SELECT COUNT (D2.Titolo)
FROM Dirige D2
GROUP BY D2.CF)
Devi 'spacchettare' mentalmente l'esecuzione delle query/subquery
(SELECT COUNT (D2.Titolo)
FROM Dirige D2
GROUP BY D2.CF)
Questa subquery estrae dalla tabella Dirige il conteggio dei film diretti da ogni registra. Ottieni in output una lista di valori numerici corrispondenti al n° di film diretti da ogni regista del tipo : 2,10,1,7,3 ...
SELECT D1.CF
FROM Dirige D1
GROUP BY D1.CF
HAVING COUNT(D1.Titolo) >= ALL (2,10,1,7,3 ...)
Questa query estrae gli ID dei registi che hanno diretto un numero di film maggiore/uguale al numero massimo di film diretti scaturito dal'esecuzione della query precedente (quindi 10). Prima vengono raggruppati i records in funzione dell'ID regista (tramite Group By) e poi sul conteggio dei film realizzati dal registra viene applicato il filtro per >= (tramite HAVING).
A questo punto ottieni un 'resultset' che contiene solo gli ID dei registi con titoli diretti >= 10.
SELECT A.CF
FROM Attore A, Recita R, Film F, Dirige D
WHERE D.CF IN (ID dei registi con film >=10)
A questo punto questa query filtra il risultato ... Sono solo perplesso dal fatto che utilizzi 4 tabelle ma non vedo join
Ottieni il risultato previsto?