Salve a tutti,
ho svolto delle query da alcune prove d'esame e non potendone verificare la correttezza (dovrei mettermi a creare il database e ci vorrebbe troppo tempo) vorrei chiedere a voi se sono corrette, o qualche suggerimento per eliminare magari istruzioni superflue.
La prima query si basa sul seguente schema logico.
In grassetto le chiavi primarie!
Citta(Nome, Regione)
Attraversa(NomeFiume, NomeCitta)
Fiume(Nome, Lunghezza, RegioneSorgente)
La query chiedeva di trovare la Regione in cui sorgono i fiumi che attraversano esattamente 3 città, di ordinare alfabeticamente il risultato eliminando i duplicati.
Ho risolto così, è corretta? E' l'unica su cui ho parecchi dubbi..
Ho pensato di dover trovare un numero di occorrenze tra Fiume e Attraversa che fosse uguale a 3, ma non so se così sia corretto.
Inoltre non so come si possa ordinare alfabeticamente, penso sia automatico inserendo come parametro di order by una stringa, no?
Un'altra query che vorrei capire se è svolta bene è la seguente.codice:SELECT DISTINCT F.RegioneSorgente, COUNT(*) FROM Fiume F, Attraversa A WHERE A.NomeFiume = F.Nome HAVING COUNT(*) = 3 ORDER BY F.RegioneSorgente
Docente(Cognome, Dipartimento)
Docenza(CognomeDocente, CodiceCorso)
Corso(Codice, Nome, Crediti)
La query chiede di trovare il docente che eroga il maggior numero di crediti. Ho provato a risolvere così:
Un'ultima domanda ha a che fare sempre con questo schema logico. Mi si chiede di cambiare il codice del corso 'Basi dati' da DB a DB1, tenendo conto che i docenti che tenevano DB terranno DB1 e che il vincolo di IR è definito con politica NO ACTION.codice:CREATE VIEW CreditiDocenti(Docente, NumCrediti) AS SELECT Docente.Cognome, SUM(Corso.Crediti) FROM Corso, Docente, Docenza WHERE Docenza.CognomeDocente = Docente.Cognome AND Docenza.CodiceCorso = Corso.Codice GROUP BY Docente.Cognome SELECT Docente.Cognome FROM CreditiDocenti WHERE MaxCrediti = (SELECT MAX(NumCrediti) FROM CreditiDocenti)
Ho scritto così, è fatto bene o va creata una transazione, in modo da eseguire tutte le tre query come se fossero un'unica query?
codice:INSERT INTO Corso SET Codice='DB1' WHERE Nome='Basi dati' UPDATE Docenza SET CodiceCorso='DB1' WHERE CodiceCorso='DB' DELETE FROM Corso WHERE Codice='DB'


Rispondi quotando