

































































Studia grazie alle numerose risorse presenti su Docsity
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
Prepara i tuoi esami
Studia grazie alle numerose risorse presenti su Docsity
Prepara i tuoi esami con i documenti condivisi da studenti come te su Docsity
Trova i documenti specifici per gli esami della tua università
Preparati con lezioni e prove svolte basate sui programmi universitari!
Rispondi a reali domande d’esame e scopri la tua preparazione
Riassumi i tuoi documenti, fagli domande, convertili in quiz e mappe concettuali
Studia con prove svolte, tesine e consigli utili
Togliti ogni dubbio leggendo le risposte alle domande fatte da altri studenti come te
Esplora i documenti più scaricati per gli argomenti di studio più popolari
Ottieni i punti per scaricare
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
Romanzo(id, idAutore*, titolo, annoPubblicazione, prezzo, scheda) Autore(id, cognome, nome, nazionalità, dataNascita, luogoNascita, dataMorte, luogoMorte) Personaggio(id, nome, cognome, descrizione) PersonaggioRomanzo(idPersonaggio*, idRomanzo*, descrizione), Romanzi pubblicati nel 2009, Romanzi pubblicati a partire dal 1990, Autore (cioè Nome e Cognome) e Titolo di tutti i romanzi, Autore (cioè Nome e Cognome) e Titolo di tutti i romanzi, ordinati per cognome e nome dell’autore, Autore (cioè Nome e Cognome) e Titolo dei romanzi di autori russi, ordinati per cognome e nome dell’autore, Titolo dei romanzi di autori nati nel ventesimo secolo, ordinati per cognome e nome dell’autore e – a parità di autore – per data di pubblicazione, Titolo e anno di pubblicazione di romanzi di autori viventi, Romanzi di scrittori viventi, oppure morti ma non a Torino
Tipologia: Esercizi
1 / 73
Questa pagina non è visibile nell’anteprima
Non perderti parti importanti!


































































Progettazione logica 2 Esercizi SQL per iniziare 8 GROUP BY HAVING 12 SVOLGIMENTO SQL 18 CREA TABELLE 24 INSERISCO VALORI NELLE TABELLE 26 Tracciato record studente nome: stringa cognome: stringa email: stringa corsoFrequentato Mario Rossi [email protected] Fondamenti di basi di dati Laura Bianchi [email protected] Fondamenti di programmazione Paolo Verdi [email protected] Fondamenti di programmazione corso nomeCorso: stringa ore: intero codice Fondamenti di basi di dati 80 10 Fondamenti di programmazione
Uno studente quale UF frequenta? Per rispondere devo correlare i dati di studente e UF. Nei database relazionali se uno studente frequenta solo un corso, possiamo correlare i dati aggiungendo a studente un’ulteriore informazione sul corso frequentato. E’ una correlazione basata si valori. DBMS (Database Management System) in SQL SELECT * FROM studente, corso
WHERE studente.corsoFrequentato = corso.nomeCorso Associazioni uno a uno ( 1 : 1 ) Associazioni uno a molti ( 1 :N) Associazioni molti a molti (N:M) Si guardano le cardinalità massime!!!!! Attenzione alle associazioni molti a molti noleggio idCliente idAutomobile dataInizio 10 100 10 / 11 / 2021 10 100 11 / 11 / 2021 noleggio 2 id idCliente idAutomobile dataInizio 1 10 100 10 / 11 / 2021 2 10 100 11 / 11 / 2021 3 10 150 11 / 11 / 2021
Rappresentazione dei dati nel modello logico relazionale Esempio entità PersonaggioSecondario ha due rappresentazioni, una appartenente alla teoria del modello e una più legata ai DBMS Relazione PersonaggioSecondario(nome) l’id univoco dell’ER diventa PRIMARY KEY Tabella PersonaggioSecondario
Automobile(id, targa, marca, modello, annoImm, disponibile) ClasseTariffaria(id, quotaFissa, quotaKm, quotaAss) Cliente(id, codFisc, nome) Telefono(numero) Automobile(id, targa, marca, modello, annoImm, disponibile) ClasseTariffaria(id, quotaFissa, quotaKm, quotaAss) Traduciamo le associazioni- Primo caso (da non replicare) Cliente(id, codFisc, nome) Telefono(numero) Automobile(id, targa, marca, modello, annoImm, disponibile) ClasseTariffaria(id, quotaFissa, quotaKm, quotaAss)
Possiede(idCliente, numeroTel) Noleggia(idCliente, idAuto, datainizio, anticipo) Appartiene(idAuto, ClasseTarif) L’asterisco indica FOREIGN KEY Traduzione ottimizzata Cliente(id, codFisc, nome) Telefono(numero, idCliente) Automobile(id, targa, marca, modello, annoImm, disponibile, classeTarif) ClasseTariffaria(id, quotaFissa, quotaKm, quotaAss) Noleggia(idCliente, idAuto, datainizio, anticipo)
Utilizza (idPrenotazione, idPianta) Specie (id, nome, descrizione, coltivazione, esposizione, collocazione, idDipendente) Dipendente (id, cognome, nome, tipo, qualifica, annoAssunzione) Attivita (id, nome, costoOrario) Svolge (idDipendente, idAttivita*)
select * from Romanzo where annoPubblicazione= 2009
FROM romanzo WHERE titolo LIKE ‘%Sposi%’
GROUP BY HAVING
Dato lo schema relazionale attori (codAttore, nome, annoNascita, nazionalita); recita (codAttore, codFilm) film (codFilm, titolo, annoProduzione, nazionalità, regista, genere) proiezioni (codProiezione, codFilm, codSala, incasso, durata, dataProiezione) sale (codSala, posti, nome, citta) Scrivere le interrogazioni SQL che restituiscono le seguenti informazioni Per ogni città, il numero di sale
SELECT citta, COUNT() AS ‘numero sale’ FROM sale GROUP BY citta resultset sale .citta numero sale Per ogni città, il numero di sale con più di 60 posti SELECT citta, COUNT() AS ‘numero sale’ FROM sale WHERE posti > 60 GROUP BY citta Per ogni regista, il numero di film diretti dopo il 1990 SELECT regista, COUNT(*) AS ‘numero film’ FROM film WHERE annoProduzione > 1990 GROUP BY regista resultset film.regista numero film Per ogni regista, l’incasso totale di tutte le proiezioni dei suoi film SELECT regista, SUM(incasso) AS ‘IncassoTotale' FROM film, proiezioni WHERE film.codFilm=proiezioni.codFilm GROUP BY regista resultset film.regista IncassoTotale
Per ogni regista e per ogni attore, il numero di film del regista con l’attore SELECT F.regista, A.nome, COUNT() AS NumFilm FROM film F, attori A, recita R WHERE R.codAttore = A.codAttore AND R.codFilm = F.codFilm GROUP BY F.regista, A.nome resultset film.regista attori.nome numFilm Per ogni film prodotto dopo il 2000 , il codice, il titolo e l’incasso totale di tutte le sue proiezioni SELECT F.codFilm, F.titolo, SUM(P.incasso) AS ‘IncassoTotale’ FROM film F, proiezioni P WHERE F.codFilm=P.codFilm AND F.annoProduzione> 2000 GROUP BY F.codFilm, F.titolo resultset film.codFilm film.titolo Incasso totale Il numero di attori dei film in cui appaiono solo attori nati prima del 1970 SELECT film.titolo, COUNT() FROM film,attori,recita WHERE film.codFilm=recita.codFilm AND recita.codAttore=attori.codAttore AND annoNascita< 1970 GROUP BY film.titolo resultset film.titolo Numero attori Per ogni film di fantascienza, il titolo e l’incasso totale di tutte le sue proiezioni
SELECT film.titolo, SUM(proiezioni.incasso) AS ‘IncassoTotale’ FROM film,proiezioni WHERE film.codFilm=proiezioni.codFilm AND film.genere=’fantascienza’ GROUP BY film.titolo resultset film.titolo Incasso totale Per ogni film di fantascienza il titolo e l’incasso totale di tutte le sue proiezioni successive al 1 / 1 / 01 Per ogni film di fantascienza che non è mai stato proiettato prima del 1 / 1 / 01 il titolo e l’incasso totale di tutte le sue proiezioni Per ogni sala di Pisa, che nel mese di gennaio 2005 ha incassato più di 20000 €, il nome della sala e l’incasso totale (sempre del mese di gennaio 2005 )
Romanzo(id, idAutore*, titolo, annoPubblicazione, prezzo, scheda)
-- phpMyAdmin SQL Dump -- version 5.1. -- https://www.phpmyadmin.net/ -- -- Host: 127.0.0. -- Creato il: Dic 08, 2021 alle 17: -- Versione del server: 10.4.22-MariaDB -- Versione PHP: 7.3.
(2, 'Lara', 'Sole', 'Inglese', '1950-10-03', 'New York', '0000-00-00', ''), (3, 'Jova', 'Pino', 'Inglese', '1930-12-05', 'Londra', '2003-12-02', 'Boston'), (4, 'Valdo', 'Lori', 'Russo', '1971-12-08', 'Russia', NULL, NULL), (5, 'Ponyo', 'Lon', 'Russo', '1991-08-08', 'Russia', NULL, NULL), (6, 'Connie', 'Sand', 'Italiana', '1991-12-06', 'Roma', NULL, NULL), (7, 'Alessandro', 'Manzoni', 'italiana', '1785-03-07', 'Milano', '1873-05-22', 'Milano'), (8, 'Don', 'DeLillo', 'inglese', '1936-11-20', 'New York', NULL, NULL);
-- -- Struttura della tabella personaggio -- CREATE TABLE personaggio ( id int(1) NOT NULL, nome varchar(150) NOT NULL, cognome varchar(150) NOT NULL, descrizione varchar(150) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- -- Dump dei dati per la tabella personaggio -- INSERT INTO personaggio (id, nome, cognome, descrizione) VALUES (1, 'Chris', 'Columbus', 'coraggioso'), (2, 'Pina', 'Margarina', 'timida'), (3, 'Pino', 'Lolito', 'coraggioso'), (4, 'Jonathan', 'Natalino', 'spavaldo'), (5, 'Luana', 'Sera', 'timida'), (6, 'Alessandro', 'Nanco', 'comico'), (7, 'Benjamin', 'Malaussène', 'comico');
personaggioromanzoCREATE TABLE personaggioromanzo ( idPersonaggio int(1) NOT NULL, idRomanzo int(1) NOT NULL, descrizione varchar(150) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- -- Dump dei dati per la tabella personaggioromanzo -- INSERT INTO personaggioromanzo (idPersonaggio, idRomanzo, descrizione) VALUES (2, 1, 'magico'), (3, 2, 'pauroso'), (1, 3, 'magico'), (7, 19, 'dramma');
-- -- Struttura della tabella romanzo -- CREATE TABLE romanzo ( id int(1) NOT NULL, idAutore int(1) NOT NULL, titolo varchar(150) NOT NULL, annoPubblicazione date NOT NULL, prezzo int(3) NOT NULL, scheda varchar(150) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- -- Dump dei dati per la tabella romanzo