SQL Esercitazione 6-7 Contatti: Dott.ssa Silvia Bonfanti silvia.bonfanti@unibg.it
Esercizio 1: Cinema Sala (numero, num_posti, dim_schermo, num_file, num_posti_per_fila, tipo) Constraints su Sala: tipo= 3-D OR tipo= tradizionale Proiezione (num_proiezione, sala, film_proiettato, data, ora) Biglietto (proiezione, num_fila, num_posto, data_vendita, prezzo) Film (cod, titolo, anno, durata, lingua)
Esercizio 1: Cinema Con riferimento allo schema logico «Cinema», svolgere le seguenti Query utilizzando il linguaggio SQL
Esercizio 1: Cinema Quali film sono stati proiettati in sala 1 e in sala 2 ma non in sala 3? SELECT film_proiettato FROM (SELECT film_proiettato FROM Proiezione WHERE sala=1 OR sala=2 GROUP BY film_proiettato HAVING COUNT(DISTINCT sala)=2) AS T WHERE T.film_proiettato NOT IN (SELECT film_proiettato FROM Proiezione WHERE sala=3)
Esercizio 1: Cinema In quali sale sono stati proiettati film di durata maggiore di 60 minuti ma non in lingua italiana?
Esercizio 1: Cinema In quali sale sono stati proiettati film di durata maggiore di 60 minuti ma non in lingua italiana? SELECT sala FROM Proiezione Inner Join Film ON film_proiettato=cod WHERE durata>60 and lingua<> italiano
Esercizio 1: Cinema Elenco dei film (cod, titolo) con relativo numero di proiezioni
Esercizio 1: Cinema Elenco dei film (cod, titolo) con relativo numero di proiezioni SELECT cod, titolo, COUNT(*) AS NUM_PROIEZIONI FROM Proiezione Inner Join Film ON film_proiettato=cod GROUP BY cod, titolo
Esercizio 1: Cinema Quanti film differenti sono stati proiettati in sala 2?
Esercizio 1: Cinema Quanti film differenti sono stati proiettati in sala 2? SELECT COUNT(DISTINCT film_proiettato) AS NUM_FILM_PROIETTATI_SALA2 FROM Proiezione WHERE sala=2
Esercizio 1: Cinema Quanto è l incasso totale del cinema?
Esercizio 1: Cinema Quanto è l incasso totale del cinema? SELECT SUM(prezzo) AS INCASSO_CINEMA FROM Biglietto
Esercizio 1: Cinema Quant è l incasso ottenuto dal film con cod=123?
Esercizio 1: Cinema Quant è l incasso ottenuto dal film con cod=123? SELECT SUM(prezzo) AS INCASSO_FILM_123 FROM Biglietto Inner Join Proiezione ON proiezione=num_proiezione WHERE film_proiettato=123
Esercizio 2: Treni Treno (numero, tipo) Fermata(treno, num_fermata, ora, stazione) Stazione(codice, nome, città) Viaggio (treno, data, convoglio) Convoglio (numero, modello, marca, annoacquisto)
Esercizio 2: Treni Con riferimento allo schema logico dei treni, svolgere le seguenti Query utilizzando il linguaggio SQL
Esercizio 2: Treni Elenco dei convogli con relativo modello
Esercizio 2: Treni Elenco dei convogli con relativo modello SELECT numero, modello FROM CONVOGLIO
Esercizio 2: Treni Elenco dei treni (numero) di tipo frecciarossa
Esercizio 2: Treni Elenco dei treni (numero) di tipo frecciarossa SELECT numero FROM TRENO WHERE tipo= frecciarossa
Esercizio 2: Treni Quanti sono i treni che partono da Bergamo?
Esercizio 2: Treni Quanti sono i treni che partono da Bergamo? SELECT COUNT(*) AS NUM_TRENI_BERGAMO FROM FERMATA Inner Join STAZIONE ON FERMATA.stazione=STAZIONE.codice WHERE nfermata=1 AND citta= Bergamo
Esercizio 2: Treni Quale è l orario minimo di partenza tra i treni che partono da Milano?
Esercizio 2: Treni Quale è l orario minimo di partenza tra i treni che partono da Milano? SELECT MIN(ora) AS MIN_ORA FROM FERMATA Inner Join STAZIONE ON FERMATA.stazione=STAZIONE.codice WHERE nfermata=1 AND citta= Milano
Esercizio 2: Treni Elenco dei treni (numero) che non partono da Milano
Esercizio 2: Treni Elenco dei treni (numero) che non partono da Milano SELECT treno FROM FERMATA Inner Join STAZIONE ON stazione=codice WHERE nfermata=1 AND citta<> Milano
Esercizio 2: Treni Quali sono i treni che vanno da Bergamo a Rimini passando per Brescia?
Esercizio 2: Treni Quali sono i treni che vanno da Bergamo a Rimini passando per Brescia? SELECT F1.treno FROM (( SELECT treno, nfermata FROM FERMATA Inner Join STAZIONE ON stazione=codice WHERE citta= Bergamo ) AS F1 Inner Join ( SELECT treno, nfermata FROM FERMATA Inner Join STAZIONE ON stazione=codice WHERE citta= Brescia ) AS F2 ON F1.treno = F2.treno AND F1.nfermata < F2.nfermata) Inner Join (SELECT treno, nfermata FROM FERMATA Inner Join STAZIONE ON stazione=codice WHERE citta= Rimini ) AS F3 ON F2.treno = F3.treno AND F2.nfermata < F3.nfermata
Esercizio 2: Treni Quali sono i treni che vanno da Bergamo a Brescia ma non vanno a Rimini?
Esercizio 2: Treni Quali sono i treni che vanno da Bergamo a Brescia ma non vanno a Rimini? SELECT F.treno FROM ( SELECT F1.treno FROM (( SELECT treno, nfermata FROM FERMATA Inner Join STAZIONE ON stazione=codice WHERE citta= Bergamo ) AS F1 Inner Join ( SELECT treno, nfermata FROM FERMATA Inner Join STAZIONE ON stazione=codice WHERE citta= Brescia ) AS F2 ON F1.treno = F2.treno AND F1.nfermata < F2.nfermata)) AS F WHERE F.treno NOT IN (SELECT treno FROM FERMATA Inner Join STAZIONE ON stazione=codice WHERE citta= Rimini )
Esercizio 3: Noleggio ombrelloni Ombrellone (id, settore_spiaggia, num_fila, num_ordine_fila, tipologia_ombrellone) Tipologia(codice, nome, descrizione) Tariffa (codice, prezzo, data_inizio, data_fine, tipo, num_min_giorni*) Constraints su Tariffa: (tipo= Giornaliera AND num_min_giorni is null) OR (tipo= Abbonamento AND num_min_giorni is not null) Riguarda (codice_tipologia, codice_tariffa) Giorno_Disponibilita (id_ombrellone, data, venduto_in_contratto*) Contratto (num_progr, data, importo, stipulato_da) Cliente (codice, nome, cognome, data_nascita, indirizzo)
Esercizio 3: Noleggio ombrelloni Con riferimento allo schema logico «Noleggio Ombrelloni», svolgere le seguenti Query utilizzando il linguaggio SQL
Esercizio 3: Noleggio ombrelloni Quali sono gli ombrelloni con tipologia di nome vip?
Esercizio 3: Noleggio ombrelloni Quali sono gli ombrelloni con tipologia di nome vip? SELECT id FROM Ombrellone Inner Join Tipologia ON tipologia_ombrellone=codice WHERE nome= vip
Esercizio 3: Noleggio ombrelloni Elenco dei clienti (codice) che hanno associato almeno un contratto
Esercizio 3: Noleggio ombrelloni Elenco dei clienti (codice) che hanno associato almeno un contratto SELECT DISTINCT(codice) FROM Cliente Inner Join Contratto ON codice=stipulato_da NOTA: con l operatore DISTINCT il codice dei vari clienti che rispondono alla Query comparirà una sola volta (anche se dovessero esistere dei duplicati)
Esercizio 3: Noleggio ombrelloni Tipologia delle tariffe (codice, nome) con prezzo<200
Esercizio 3: Noleggio ombrelloni Tipologia delle tariffe (codice, nome) con prezzo<200 SELECT codice, nome FROM ((Tariffa Inner Join Riguarda ON Tariffa.codice=codice_tariffa) Inner Join Tipologia ON codice_tipologia=tipologia.codice) AS T WHERE T.prezzo<200
Esercizio 3: Noleggio ombrelloni Somma degli importi dei vari contratti per i clienti (nome, cognome) nati tra il 02/03/1975 e 05/07/1980 e aventi somma degli importi > 600
Esercizio 3: Noleggio ombrelloni Somma degli importi dei vari contratti per i clienti (nome, cognome) nati tra il 02/03/1975 e 05/07/1980 e aventi somma degli importi > 600 SELECT nome, cognome, SUM(importo) AS TOTALE_IMPORTO FROM Contratto Inner Join Cliente ON stipulato_da=codice WHERE data_nascita>= 02/03/1975 AND data_nascita<= 05/07/1980 GROUP BY nome, cognome HAVING SUM(importo)>600
Esercizio 3: Noleggio ombrelloni Qual è il codice della tariffa con prezzo minimo tra il 10/07/2014 e 20/07/2014?
Esercizio 3: Noleggio ombrelloni Qual è il codice della tariffa con prezzo minimo tra il 10/07/2014 e 20/07/2014? SELECT codice FROM (SELECT codice, prezzo FROM Tariffa WHERE data_inizio < 10/07/2014 AND data_fine > 20/07/2014 ) AS T Inner Join (SELECT MIN(prezzo) AS MIN_PREZZO FROM Tariffa WHERE data_inizio < 10/07/2014 AND data_fine> 20/07/2014 ) AS T2 ON T.prezzo=T2.MIN_PREZZO
Esercizio 3: Noleggio ombrelloni Quali ombrelloni non sono disponibili in data 15/06/2018 e 16/06/2018?
Esercizio 3: Noleggio ombrelloni Quali ombrelloni non sono disponibili in data 15/06/2018 e 16/06/2018? SELECT id FROM Ombrellone WHERE id NOT IN (SELECT id_ombrellone FROM Giorno_Disponibilita WHERE data= 15/06/2018 OR data= 16/06/2018 ) SELECT id FROM ((SELECT id FROM Ombrellone) AS O Left Join (SELECT id_ombrellone FROM Giorno_Disponibilita WHERE data= 15/06/2018 OR data= 16/06/2018 ) AS G_D ON id=id_ombrellone)) AS T WHERE id_ombrellone=null
Esercizio 3: Noleggio ombrelloni Quali contratti non si riferiscono ad ombrelloni di tipologia con nome vip?
Esercizio 3: Noleggio ombrelloni Quali contratti non si riferiscono ad ombrelloni di tipologia con nome vip? SELECT num_progr FROM Contratto WHERE num_progr NOT IN (SELECT venduto_in contratto FROM ((SELECT codice FROM Tipologia WHERE nome= vip ) AS T Inner Join (SELECT id, tipologia_ombrellone FROM Ombrellone) AS T2 ON codice=tipologia_ombrellone) AS T3 Inner Join (SELECT id_ombrellone, venduto_in_contratto FROM Giorno_Disponibilita) AS T4 ON id=id_ombrellone)