La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Basi di dati I Prof.ssa Rosalba Giugno Prof. Alfredo Pulvirenti Esercitazione.

Presentazioni simili


Presentazione sul tema: "Basi di dati I Prof.ssa Rosalba Giugno Prof. Alfredo Pulvirenti Esercitazione."— Transcript della presentazione:

1 Basi di dati I Prof.ssa Rosalba Giugno Prof. Alfredo Pulvirenti Esercitazione

2 Giugno-Pulvirenti AA Esercitazione 1 Dato il seguente schema relazionale per modellare un torneo di calcio: –giocatori( id_giocatore, nome, cognome, eta, id_squadra, ruolo) –squadre( id_squadra, nome, citta) –calendario( id_partita, id_sq_casa, id_sq_ospite, data) –gol( id_partita, id_giocatore, minuto) Il campo id_sq_casa indica lid della squadra che gioca in casa, mentre id_sq_ospite è quello della squadra ospite (fuori casa). Il campo ruolo nella tabella giocatore indica il ruolo del giocatore: portiere, terzino, attaccante, ecc. Il campo minuto indica il minuto di gioco della partita quando è stato segnato il gol. Nota: –Le query possono avere più soluzioni. Si presenta per ogni query una solo risposta.

3 Giugno-Pulvirenti AA Esercitazione 1 –giocatori( id_giocatore, nome, cognome, eta, id_squadra, ruolo) –squadre( id_squadra, nome, citta) –calendario( id_partita, id_sq_casa, id_sq_ospite, data) –gol( id_partita, id_giocatore, minuto) Per il giorno 15/05/2005, per ogni squadra mostrare lelenco dei gol fatti indicando, per ogni gol, il giocatore che ha segnato il gol ed il minuto di gioco. SELECT squadre.nome, gol.* FROM squadre NATURAL JOIN giocatori NATURAL JOIN calendario NATURAL JOIN gol WHERE data = 15/05/2005 ORDER BY squadre.nome, gol.minuto

4 Giugno-Pulvirenti AA Esercitazione 1 –giocatori( id_giocatore, nome, cognome, eta, id_squadra, ruolo) –squadre( id_squadra, nome, citta) –calendario( id_partita, id_sq_casa, id_sq_ospite, data) –gol( id_partita, id_giocatore, minuto) Nome e Cognome dei centrocampisti che hanno segnato almeno un gol in tutto il campionato. SELECT nome, cognome FROM giocatori NATURAL JOIN gol WHERE ruolo = centrocampista

5 Giugno-Pulvirenti AA Esercitazione 1 –giocatori( id_giocatore, nome, cognome, eta, id_squadra, ruolo) –squadre( id_squadra, nome, citta) –calendario( id_partita, id_sq_casa, id_sq_ospite, data) –gol( id_partita, id_giocatore, minuto) Nome e Cognome degli attaccanti che non hanno segnato nessun gol in tutto il campionato. SELECT nome, cognome FROM giocatori EXCEPT SELECT nome, cognome FROM giocatori NATURAL JOIN gol WHERE ruolo = attaccante

6 Giugno-Pulvirenti AA Esercitazione 1 –giocatori( id_giocatore, nome, cognome, eta, id_squadra, ruolo) –squadre( id_squadra, nome, citta) –calendario( id_partita, id_sq_casa, id_sq_ospite, data) –gol( id_partita, id_giocatore, minuto) Nome, Cognome e Squadra di appartenenza del giocatore più giovane del campionato. –Nota: Potrebbero essercene più di uno. SELECT giocatori.nome, giocatori.cognome,squadre.nome FROM giocatori NATURAL JOIN squadre WHERE eta = (SELECT MIN(eta) FROM giocatori)

7 Giugno-Pulvirenti AA Esercitazione 1 –giocatori( id_giocatore, nome, cognome, eta, id_squadra, ruolo) –squadre( id_squadra, nome, citta) –calendario( id_partita, id_sq_casa, id_sq_ospite, data) –gol( id_partita, id_giocatore, minuto) Per ogni squadra indicare il nome ed il numero totale di gol segnati dallinizio del campionato. SELECT squadre.nome, count(*) as Gol fatti FROM squadre, giocatori, gol WHERE squadre.id_squadra = giocatori.id_squadra AND giocatori.id_giocatore = gol.id_giocatore GROUP BY squadre.nome

8 Giugno-Pulvirenti AA Esercitazione 1 –giocatori( id_giocatore, nome, cognome, eta, id_squadra, ruolo) –squadre( id_squadra, nome, citta) –calendario( id_partita, id_sq_casa, id_sq_ospite, data) –gol( id_partita, id_giocatore, minuto) Indicare le partite (squadre e data) che sono terminate al punteggio di 1 a 1. SELECT s1.nome, s2.nome FROM calendario c, squadre s1, squadre s2 WHERE c.id_sq_casa = s1.id_squadra AND c.id_sq_ospite = s2.id_squadra AND 1 = (SELECT count(*) FROM giocatore NATURAL JOIN gol WHERE giocatore.id_squadra = s1.id_squadra AND gol.id_partita = c.id_partita) AND 1 = (SELECT count(*) FROM giocatore NATURAL JOIN gol WHERE giocatore.id_squadra = s2.id_squadra AND gol.id_partita = c.id_partita)

9 Giugno-Pulvirenti AA Esercitazione 1 –giocatori( id_giocatore, nome, cognome, eta, id_squadra, ruolo) –squadre( id_squadra, nome, citta) –calendario( id_partita, id_sq_casa, id_sq_ospite, data) –gol( id_partita, id_giocatore, minuto) Usando una tecnica diversa da quella utilizzata nel punto h), indicare le partite (squadre e data) che sono terminate al punteggio di 0 a 0. SELECT s1.nome, s2.nome FROM calendario c, squadre s1, squadre s2 WHERE c.id_sq_casa = s1.id_squadra AND c.id_sq_ospite = s2.id_squadra AND NOT EXISTS (SELECT * FROM gol WHERE gol.id_partita = c.id_partita)

10 Giugno-Pulvirenti AA Esercitazione 2 Considera una relazione con un solo attributo R(A). –Scrivere una query SQL quanto più semplice possibile che restituisca tutti i valori di A che compaiono in R almeno 3 volte e mostrarli una volta sola in output. Puoi assumere che non ci siano NULL nella relazione. SELECT DISTINCT R.A FROM R, R r1, R r2 WHERE R.A = r1.A and r1.A = r2.A


Scaricare ppt "Basi di dati I Prof.ssa Rosalba Giugno Prof. Alfredo Pulvirenti Esercitazione."

Presentazioni simili


Annunci Google