braian
15-08-2008, 11:58
Sto preparando l'esame di basi dati e utilizzo sempre un database riempito da me su cui posso scrivere le query di cui ho le soluzioni.
Il database è
Attori(CodiceAtt, Nome, AnnoNascita);
AttoriFilm(CodiceAtt*, CodiceFilm*)
Film(CodiceFilm, Titolo, AnnoProduzione, Regista)
Proiezioni(CodiceFilm*, CodiceSala*, Incasso, DataProiezione)
Sala(CodiceSala, Posti, Nome, Citta)
Dove le sottolineature denotano chiavi primarie e gli asterischi chiavi esterne.
La query che devo scrivere è la seguente:
Restituire il nome ed il codice di tutte le sale di Pisa in cui ogni proiezione del film con codice 100 che `e avvenuta il 10/12/2001 ha incassato almeno 300.000
Le soluzioni possibili che mi vengono date sono
SELECT s.Nome, s.CodiceSala
FROM Sale s
WHERE s.Citta = ’Pisa’ AND
(FOR ALL p IN Proiezioni
WHERE p.CodiceSala=s.CodiceSala AND p.CodiceFilm = 100
AND p.DataProiezione = ’10/12/2001’
: p.Incasso >= 300000);
oppure
SELECT s.Nome, s.CodiceSala
FROM Sale s
WHERE s.Citta = ’Pisa’ AND
NOT EXISTS (
SELECT *
FROM Proiezioni p
WHERE p.CodiceSala=s.CodiceSala AND p.CodiceFilm = 100
AND p.DataProiezione = ’10/12/2001’
AND NOT(p.Incasso >= 300000));
Vorrei sapere secondo voi se è accettabile una query scritta così:
select s.nome,s.codicesala
from film f, sale s, proiezioni p
where f.codicefilm=p.codicefilm and s.codicesala=p.codicesala and f.codicefilm=100 and s.citta='Pisa' and p.incasso>300000 and p.dataproiezione = ’10/12/2001’;
visto che sembra produrre gli stessi risultati.
Grazie
Il database è
Attori(CodiceAtt, Nome, AnnoNascita);
AttoriFilm(CodiceAtt*, CodiceFilm*)
Film(CodiceFilm, Titolo, AnnoProduzione, Regista)
Proiezioni(CodiceFilm*, CodiceSala*, Incasso, DataProiezione)
Sala(CodiceSala, Posti, Nome, Citta)
Dove le sottolineature denotano chiavi primarie e gli asterischi chiavi esterne.
La query che devo scrivere è la seguente:
Restituire il nome ed il codice di tutte le sale di Pisa in cui ogni proiezione del film con codice 100 che `e avvenuta il 10/12/2001 ha incassato almeno 300.000
Le soluzioni possibili che mi vengono date sono
SELECT s.Nome, s.CodiceSala
FROM Sale s
WHERE s.Citta = ’Pisa’ AND
(FOR ALL p IN Proiezioni
WHERE p.CodiceSala=s.CodiceSala AND p.CodiceFilm = 100
AND p.DataProiezione = ’10/12/2001’
: p.Incasso >= 300000);
oppure
SELECT s.Nome, s.CodiceSala
FROM Sale s
WHERE s.Citta = ’Pisa’ AND
NOT EXISTS (
SELECT *
FROM Proiezioni p
WHERE p.CodiceSala=s.CodiceSala AND p.CodiceFilm = 100
AND p.DataProiezione = ’10/12/2001’
AND NOT(p.Incasso >= 300000));
Vorrei sapere secondo voi se è accettabile una query scritta così:
select s.nome,s.codicesala
from film f, sale s, proiezioni p
where f.codicefilm=p.codicefilm and s.codicesala=p.codicesala and f.codicefilm=100 and s.citta='Pisa' and p.incasso>300000 and p.dataproiezione = ’10/12/2001’;
visto che sembra produrre gli stessi risultati.
Grazie