Basi di dati I 19 luglio 2018 Esame Compito A Durata: un ora e trenta minuti.

Documenti analoghi
Basi di dati I 5 settembre 2017 Tempo a disposizione: un ora e 45 minuti.

Basi di dati I 8 luglio 2016 Esame Compito A Tempo a disposizione: un ora e trenta minuti.

Basi di dati 19 dicembre 2016 Prova parziale Compito A Tempo a disposizione: un ora e quindici minuti. Libri chiusi.

Basi di dati I 19 settembre 2016 Tempo a disposizione: un ora e 45 minuti.

Basi di dati 8 settembre 2015 Esame Compito A Tempo a disposizione: due ore. Libri chiusi.

Basi di dati I 10 settembre 2019 Tempo a disposizione: un ora e 30 minuti. Possibili soluzioni. Cognome: Nome: Matricola:

Basi di dati I 7 febbraio 2011 Compito A Tempo a disposizione: un ora e trenta minuti. Libri chiusi.

Basi di dati I 7 febbraio 2017 Esame Compito A Durata: un ora per la prova breve e due ore per la prova completa.

Basi di dati I 10 luglio 2017 Tempo a disposizione: un ora e 30 minuti.

Basi di dati I 28 gennaio 2014 Compito A Tempo a disposizione: un ora e quarantacinque minuti.

Basi di dati I 8 settembre 2011 Tempo a disposizione: un ora e trenta minuti. Libri chiusi.

Basi di dati I 22 settembre 2014 Tempo a disposizione: un ora e trenta minuti.

Basi di dati 30 gennaio 2015 Esame Compito A Tempo a disposizione: un ora e quarantacinque minuti. Libri chiusi. Possibili soluzioni

Basi di dati I 6 settembre 2018 Tempo a disposizione: un ora e 45 minuti.

Basi di dati I Prova di autovalutazione 1 novembre 2016 Soluzioni

Basi di dati I Esercizi proposti il 24 ottobre 2016

Basi di dati 8 novembre 2010 Prova parziale Compito A

Basi di dati I 27 gennaio 2016 Esame Compito A Tempo a disposizione: un ora e quarantacinque minuti. Libri chiusi.

Basi di dati I 11 luglio 2019 Tempo a disposizione: un ora e 45 minuti. Cognome: Nome: Matricola:

Basi di dati I 14 febbraio 2019 Compito A Tempo a disposizione: un ora e quindici minuti per la prova breve, due ore per la prova lunga

Basi di dati (nuovo ordinamento) 16 giugno 2008 Compito A

Basi di dati 30 gennaio 2015 Esame Compito A Tempo a disposizione: un ora e quarantacinque minuti. Libri chiusi.

2. le operazioni nettamente più frequenti sono due, che accedono rispettivamente a tutte le occorrenze

Operazioni sui dati. Interrogazioni con operatori aggregati. Capitolo 4

Basi di dati (nuovo ordinamento) 30 giugno 2005 Compito A Tempo a disposizione: un ora e trenta minuti. Libri chiusi.

Basi di dati I Prova di autovalutazione 30 ottobre 2014

Basi di dati I 6 luglio 2012 Compito A Tempo a disposizione: un ora e 45 minuti. Libri chiusi.

Basi di Dati: Elementi

SQL /10/2016 Basi di dati - SQL 1

Esercizio 5.1. Soluzione:

Operazioni su insiemi: unione, intersezione e differenza

Basi di dati (nuovo ordinamento) 30 giugno 2005 Compito A Possibili soluzioni

Corso sul linguaggio SQL

Esercitazione 1. ogni tupla contribuisce al risultato: Impiegato Reparto Rossi. Bruni. Bianchi

Basi di dati I 11 luglio 2014 Tempo a disposizione: un ora e quarantacinque minuti.

Basi di Dati. Esercitazione 1: Interrogazioni in SQL. K. Donno - Interrogazioni in SQL

Basi di dati 8 gennaio 2018 Prova parziale Compito A Tempo a disposizione: un ora e quindici minuti. Cognome: Nome: Matricola:

SQL. Argomenti della lezione. Join esplicito. Interrogazioni complesse in SQL join esplicito outer join operatori aggregati interrogazioni nidificate

Corso di Laurea in Ingegneria Informatica Fondamenti di Informatica II Modulo Basi di dati a.a

Basi di dati Prova di autovalutazione 16 dicembre 2010 Cenni sulle soluzioni

Join esplicito. SELECT con join esplicito, sintassi. Ulteriore estensione: join naturale (meno diffuso) Outer join. Join esterno: "outer join"

Basi di dati 14 gennaio 2015 Prova parziale Compito A Tempo a disposizione: un ora e quindici minuti. Libri chiusi.

Primo Compitino di Basi di Dati

Argomenti della lezione. Interrogazioni complesse in SQL join esplicito outer join operatori aggregati interrogazioni nidificate

BASE DI DATI. Esercitazione: Campionato italiano 2015/2016 Raggruppamenti Nidificazione. Informatica Umanistica Università di Pisa

Esame di Basi di Dati SOLUZIONE APPELLO 05/09/2011

Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill, SQL

Operatori aggregati: COUNT

Linguaggio SQL seconda parte

Figlio Maria. Luigi. Olga Filippo Andrea Aldo Figlio Franco Olga Filippo Andrea Aldo

Prova Scritta di Basi di Dati

formulare in SQL una interrogazione per ciascuno dei seguenti punti:

Basi di dati 11 gennaio 2016 Prova parziale Compito A Tempo a disposizione: un ora e quindici minuti. Libri chiusi.

BASE DI DATI. Esercitazione: Campionato italiano 2015/2016 Raggruppamenti Nidificazione. Informatica Umanistica Università di Pisa

Sia dato il seguente schema di base di dati:

Operatori aggregati: COUNT

Persona(CodiceFiscale, Cognome, Nome, DataDiNascita, LuogoDiNascita, Indirizzo)

Prova Pratica di Informatica, Modulo Basi di dati Appello 23/07/2018

Esercitazione 1. ogni tupla contribuisce al risultato: Impiegato Reparto Rossi. Bruni. Bianchi

Prova Scritta di Basi di Dati

Linguaggio SQL: esempi di query. a cura del Prof. Claudio Traini

07/12/2017. a cura del Prof. Claudio Traini. Modello logico utilizzato

QL (Query Language) Alice Pavarani

B a s i d i D a t i ( M o d u l o T e o r i a ) P r o v a s c r i t t a

ESERCITAZIONE: AZIENDA

Basi di Dati. Esercitazione SQL. 17 novembre 2011

Basi di dati: esercitazione. Paolo Atzeni 10/05/2006

SQL. Laboratorio di Progettazione di Basi di Dati (CdS in Informatica e TPS)

Basi di Dati. Esercitazione SQL. Paolo Papotti. 19 maggio 2005

3. Creare nella propria home directory un file nomescript contenente le definizioni delle 4 tabelle con opportuni comandi create table.

Structured Query Language

SQL Esempi. 24/10-7/11/2016 Basi di dati - SQL 1

ESAME di INFORMATICA e ARCHIVIAZIONE

Esempi SQL con Access. Orazio Battaglia

Interrogazioni semplici

SQL Esempi /10/2017 Basi di dati - SQL 1

Queries su più tabelle

SQL. Università degli Studi di Salerno. Corso di Laurea in Scienze della Comunicazione Informatica generale (matr. Dispari) Docente: Angela Peduto

Corso di. Basi di Dati I. 8. Esercitazioni in SQL: Interrogazioni nidificate

Basi di dati II, primo modulo Tecnologia delle basi di dati 24 settembre 2010 Compito A

E possibile ordinare le righe del risultato di una interrogazione attraverso la clausola order by, a chiusura di una interrogazione.

Progettazione di Sistemi Informatici

Sommario. Introduzione... 13

Esempi di Query SQL Complesse basate su Viste

Operatori aggregati. Operatori aggregati. Interrogazioni con raggruppamento. Interrogazioni con raggruppamento

Gestione dei valori nulli

Si considerino le seguenti specifiche relative alla realizzazione di un sistema informativo di una società di sviluppo software.

Prova Scritta di Basi di Dati

Esame di Basi di Dati, SOLUZIONE APPELLO 09/06/2009

IL LINGUAGGIO SQL LE BASI

formulare in SQL una interrogazione per ciascuno dei seguenti punti:

Prova Scritta di Basi di Dati

Esercizi di Informatica Documentale

Basi di Dati: Elementi

Basi di Dati: Corso di laboratorio

Il linguaggio SQL: raggruppamenti

SQL: "storia" 31/05/2006 2

Il linguaggio SQL: raggruppamenti. Versione elettronica: SQLb-gruppi.pdf

Esempi di Query con Aggregazioni in SQL/1

Transcript:

Basi di dati I 19 luglio 2018 Esame Compito A Durata: un ora e trenta minuti. Cognome: Nome: Matricola: Domanda 1 (15%) Considerare le seguenti relazioni (tutte senza valori nulli) Prodotti (Codice, Nome, Prezzo) Magazzini (Codice, Nome, Città) Giacenze (Prodotto, Magazzino, Quantità), con vincoli di integrità referenziale fra Prodotto e la chiave di Prodotti e fra Magazzino e la chiave di Magazzini Ordini (Codice, Prodotto, Quantità), con vincolo di integrità referenziale fra Prodotto e la chiave di Prodotti Siano le seguenti le cardinalità delle relazioni Prodotti: cardinalità C P = 2000 Magazzini: cardinalità C M = 20 Giacenze: cardinalità C G = 15.000 Ordini: cardinalità C O = 5000 Indicare la cardinalità del risultato di ciascuna delle seguenti interrogazioni SQL, specificando l intervallo nel quale essa può variare; indicare simboli e numeri. Min (simboli e valore) Max (simboli e valore) select prodotto, magazzino from giacenze join prodotti p on prodotto = p.codice select p.codice as prodotto, m.codice as magazzino from prodotti p, magazzini m select o.codice as ordine, prodotto, nome, quantita from ordini o join prodotti p on prodotto = p.codice where quantita > 5 select prodotto, magazzino from giacenze join prodotti p on prodotto = p.codice join magazzini m on magazzino = m.codice where prezzo > 100

Basi di dati I 19 luglio 2018 Compito A Domanda 2 (15%) Considerare la seguente base di dati sullo schema mostrato nella domanda precedente: Prodotti Codice Nome Prezzo 1 FrigoFreddo 1000 2 LavaBene 800 3 StiroTutto 50 4 PilaLungaDurata 1 Giacenze Prodotto Magazzino Quantità 1 11 3 1 12 2 2 11 1 3 11 10 4 11 100 4 12 200 4 13 150 4 14 150 Magazzini Codice Nome Città 11 Milano Centro Milano 12 Milano Fiera Milano 13 Italia Centrale Roma 14 Sud Caserta Ordini Codice Prodotto Quantità 101 1 2 102 2 2 103 2 1 104 3 1 105 4 500 106 4 300 Mostrare il risultato di ciascuna delle interrogazioni seguenti 1. select codice, nome, sum(quantita) as giacenzatotale from prodotti join giacenze on codice=prodotto group by codice, nome 2. select codice, nome from magazzini m from prodotti p from giacenze where prodotto = p.codice and magazzino = m.codice))

Basi di dati I 19 luglio 2018 Compito A Domanda 3 (20%) Con riferimento allo schema di base di dati utilizzato nelle domande precedenti, formulare le seguenti interrogazioni in SQL 1. Trovare gli ordini che possono essere interamente soddisfatti con la giacenza in un magazzino (per i quali cioè esiste un magazzino che abbia, per il prodotto ordinato nell ordine, una giacenza maggiore o uguale alla quantità ordinata). Mostrare codice e nome tanto del prodotto quanto del magazzino e le due quantità. 2. Trovare per ogni prodotto la giacenza totale (cioè la somma delle quantità disponibili nei vari magazzini); mostrare codice e giacenza totale. 3. Trovare i prodotti ordinati che hanno giacenze (non è importante la quantità) in tutti i magazzini. Mostrare codice e nome del prodotti.

Basi di dati I 19 luglio 2018 Compito A Domanda 4 (25%) Mostrare lo schema concettuale di una base di dati per un insieme di gallerie di pittura, secondo le seguenti specifiche. Ogni galleria ha un nome, si trova in una città (della quale interessa anche la nazione, con relativa sigla) e ha una serie di sale, ognuna delle quali ha un nome e una dimensione. Le gallerie espongono quadri, per ognuno dei quali interessano l autore (con codice, cognome, nome e nazione di nascita), l anno di esecuzione e la sala nella quale viene esposto (che si assume fissa: ogni quadro si trova in una sala di una galleria) Indicare almeno un identificatore per ogni entità (introducendo codici identificativi ogni volta lo si ritenga opportuno) e mostrare le cardinalità delle relationship

Basi di dati I 19 luglio 2018 Compito A Domanda 5 (10%) Con riferimento ad una relazione Cittadini(CF, Nome, Reddito, TitoloDiStudio), scrivere le interrogazioni SQL che calcolano, per ciascun titolo di studio, il reddito medio dei cittadini che hanno tale titolo, nei due casi seguenti: si usa il valore nullo per indicare che il reddito non è noto si usa il valore -1 per indicare che il reddito non è noto Domanda 6 (10%) Definire (con una opportuna notazione) su una relazione i vincoli che impongano le seguenti condizioni Retribuzioni(Matricola,Lordo,Imposte,StipNetto,Verifica) Il valore di Verifica è OK se e solo se StipNetto è uguale alla differenza fra Lordo e Imposte. Se il valore di Verifica è OK, allora StipNetto è uguale alla differenza fra Lordo e Imposte (si noti che in questo caso non si vuole invece imporre nessuna condizione se il valore di Verifica è diverso da OK ).

Basi di dati I 19 luglio 2018 Esame Compito B Durata: un ora e trenta minuti. Cognome: Nome: Matricola: Domanda 1 (15%) Considerare le seguenti relazioni (tutte senza valori nulli) Prodotti (Codice, Nome, Prezzo) Magazzini (Codice, Nome, Città) Giacenze (Prodotto, Magazzino, Quantità), con vincoli di integrità referenziale fra Prodotto e la chiave di Prodotti e fra Magazzino e la chiave di Magazzini Ordini (Codice, Prodotto, Quantità), con vincolo di integrità referenziale fra Prodotto e la chiave di Prodotti Siano le seguenti le cardinalità delle relazioni Prodotti: cardinalità C P = 2000 Magazzini: cardinalità C M = 20 Giacenze: cardinalità C G = 15.000 Ordini: cardinalità C O = 5000 Indicare la cardinalità del risultato di ciascuna delle seguenti interrogazioni SQL, specificando l intervallo nel quale essa può variare; indicare simboli e numeri. Min (simboli e valore) Max (simboli e valore) select prodotto, magazzino from giacenze join prodotti p on prodotto = p.codice where prezzo > 100 select p.codice as prodotto, m.codice as magazzino from prodotti p, magazzini m where prezzo > 100 select prodotto, magazzino from giacenze join prodotti p on prodotto = p.codice join magazzini m on magazzino = m.codice select o.codice as ordine, prodotto, nome, quantita from ordini o join prodotti p on prodotto = p.codice where quantita > 5

Basi di dati I 19 luglio 2018 Compito B Domanda 2 (15%) Considerare la seguente base di dati sullo schema mostrato nella domanda precedente: Prodotti Codice Nome Prezzo 1 FrigoFreddo 1000 2 LavaBene 800 3 StiroTutto 50 4 PilaLungaDurata 1 Giacenze Prodotto Magazzino Quantità 1 11 3 1 12 2 2 11 1 3 11 10 4 11 100 4 12 200 4 13 150 4 14 150 Magazzini Codice Nome Città 11 Milano Centro Milano 12 Milano Fiera Milano 13 Italia Centrale Roma 14 Sud Caserta Ordini Codice Prodotto Quantità 101 1 2 102 2 2 103 2 1 104 3 1 105 4 500 106 4 300 Mostrare il risultato di ciascuna delle interrogazioni seguenti 1. select p.codice, nome, sum(quantita) as quantitaordinata from prodotti p join ordini o on p.codice=prodotto group by p.codice, nome 2. select codice, nome from prodotti p from magazzini m from giacenze where prodotto = p.codice and magazzino = m.codice))

Basi di dati I 19 luglio 2018 Compito B Domanda 3 (20%) Con riferimento allo schema di base di dati utilizzato nelle domande precedenti, formulare le seguenti interrogazioni in SQL 1. Trovare gli ordini che possono essere interamente soddisfatti con la giacenza in un magazzino (per i quali cioè esiste un magazzino che abbia, per il prodotto ordinato nell ordine, una giacenza maggiore o uguale alla quantità ordinata). Mostrare codice e nome tanto del prodotto quanto del magazzino e le due quantità. 2. Trovare per ogni prodotto la quantità totale ordinata (cioè la somma delle quantità indicate nei vari ordini), mostrando codice del prodotto. 3. Trovare i magazzini che hanno giacenze (non è importante la quantità) di tutti i prodotti ordinati. Mostrare codice e nome dei magazzini.

Basi di dati I 19 luglio 2018 Compito B Domanda 4 (25%) Mostrare lo schema concettuale di una base di dati per un insieme di musei, secondo le seguenti specifiche. Ogni museo ha un nome, si trova in una città (della quale interessa anche la nazione, con relativa sigla) e ha una serie di sale, ognuna delle quali ha un nome e una dimensione. I musei espongono opere d arte, per ognuna delle quali interessano l autore (con codice, cognome, nome e nazione di nascita), l anno di esecuzione e la sala nella quale viene esposta (che si assume fissa: ogni opera si trova in una sala di un museo) Indicare almeno un identificatore per ogni entità (introducendo codici identificativi ogni volta lo si ritenga opportuno) e mostrare le cardinalità delle relationship

Basi di dati I 19 luglio 2018 Compito B Domanda 5 (10%) Con riferimento ad una relazione Impiegati(CF, Nome, Stipendio, TitoloDiStudio), scrivere le interrogazioni SQL che calcolano, per ciascun titolo di studio, lo stipendio medio degli impiegati che hanno tale titolo, nei due casi seguenti: si usa il valore nullo per indicare che lo stipendio non è noto si usa il valore 0 per indicare che lo stipendio non è noto Domanda 6 (10%) Definire (con una opportuna notazione) su una relazione i vincoli che impongano le seguenti condizioni Salari(Matricola,StipLordo,Trattenute,Netto,OK) Il valore di OK è OK se e solo se Netto è uguale alla differenza fra StipLordo e Trattenute. Se il valore di OK è OK, allora Netto è uguale alla differenza fra StipLordo e Trattenute (si noti che in questo caso non si vuole invece imporre nessuna condizione se il valore di OK è diverso da OK ).

Basi di dati I 19 luglio 2018 Esame Compito A Durata: un ora e trenta minuti. Possibili soluzioni Cognome: Nome: Matricola: Domanda 1 (15%) Considerare le seguenti relazioni (tutte senza valori nulli) Prodotti (Codice, Nome, Prezzo) Magazzini (Codice, Nome, Città) Giacenze (Prodotto, Magazzino, Quantità), con vincoli di integrità referenziale fra Prodotto e la chiave di Prodotti e fra Magazzino e la chiave di Magazzini Ordini (Codice, Prodotto, Quantità), con vincolo di integrità referenziale fra Prodotto e la chiave di Prodotti Siano le seguenti le cardinalità delle relazioni Prodotti: cardinalità C P = 2000 Magazzini: cardinalità C M = 20 Giacenze: cardinalità C G = 15.000 Ordini: cardinalità C O = 5000 Indicare la cardinalità del risultato di ciascuna delle seguenti interrogazioni SQL, specificando l intervallo nel quale essa può variare; indicare simboli e numeri. Min (simboli e valore) Max (simboli e valore) select prodotto, magazzino from giacenze join prodotti p on prodotto = p.codice C G 15.000 C G 15.000 select p.codice as prodotto, m.codice as magazzino from prodotti p, magazzini m C P C M 40.000 C P C M 40.000 select o.codice as ordine, prodotto, nome, quantita from ordini o join prodotti p on prodotto = p.codice where quantita > 5 0 0 C O 5000 select prodotto, magazzino from giacenze join prodotti p on prodotto = p.codice join magazzini m on magazzino = m.codice where prezzo > 100 0 0 C G 15.000

Basi di dati I 19 luglio 2018 Compito A Domanda 2 (15%) Considerare la seguente base di dati sullo schema mostrato nella domanda precedente: Prodotti Codice Nome Prezzo 1 FrigoFreddo 1000 2 LavaBene 800 3 StiroTutto 50 4 PilaLungaDurata 1 Giacenze Prodotto Magazzino Quantità 1 11 3 1 12 2 2 11 1 3 11 10 4 11 100 4 12 200 4 13 150 4 14 150 Magazzini Codice Nome Città 11 Milano Centro Milano 12 Milano Fiera Milano 13 Italia Centrale Roma 14 Sud Caserta Ordini Codice Prodotto Quantità 101 1 2 102 2 2 103 2 1 104 3 1 105 4 500 106 4 300 Mostrare il risultato di ciascuna delle interrogazioni seguenti 1. select codice, nome, sum(quantita) as giacenzatotale from prodotti join giacenze on codice=prodotto group by codice, nome 2. select codice, nome from magazzini m from prodotti p from giacenze where prodotto = p.codice and magazzino = m.codice))

Basi di dati I 19 luglio 2018 Compito A Domanda 3 (20%) Con riferimento allo schema di base di dati utilizzato nelle domande precedenti, formulare le seguenti interrogazioni in SQL 1. Trovare gli ordini che possono essere interamente soddisfatti con la giacenza in un magazzino (per i quali cioè esiste un magazzino che abbia, per il prodotto ordinato nell ordine, una giacenza maggiore o uguale alla quantità ordinata). Mostrare codice e nome tanto del prodotto quanto del magazzino e le due quantità. select o.codice as ordine, g.magazzino as codmagazzino, m.nome as magazzino, p.codice as codprodotto, p.nome as prodotto, o.quantita as quantitaordinata, g.quantita as quantitadisponibile from ordini o join giacenze g on o.prodotto = g.prodotto join prodotti p on o.prodotto = p.codice join magazzini m on g.magazzino =m.codice where o.quantita <= g.quantita 2. Trovare per ogni prodotto la giacenza totale (cioè la somma delle quantità disponibili nei vari magazzini); mostrare codice e giacenza totale. select prodotto, sum(quantita) as giacenzatotale from giacenze group by prodotto 3. Trovare i prodotti ordinati che hanno giacenze (non è importante la quantità) in tutti i magazzini. Mostrare codice e nome del prodotti. select distinct p.codice, nome from prodotti p join ordini o on p.codice = prodotto from magazzini m from giacenze where prodotto = p.codice and magazzino = m.codice))

Basi di dati I 19 luglio 2018 Compito A Domanda 4 (25%) Mostrare lo schema concettuale di una base di dati per un insieme di gallerie di pittura, secondo le seguenti specifiche. Ogni galleria ha un nome, si trova in una città (della quale interessa anche la nazione, con relativa sigla) e ha una serie di sale, ognuna delle quali ha un nome e una dimensione. Le gallerie espongono quadri, per ognuno dei quali interessano l autore (con codice, cognome, nome e nazione di nascita), l anno di esecuzione e la sala nella quale viene esposto (che si assume fissa: ogni quadro si trova in una sala di una galleria) Indicare almeno un identificatore per ogni entità (introducendo codici identificativi ogni volta lo si ritenga opportuno) e mostrare le cardinalità delle relationship Soluzione per il compito B, quella per l altro è molto simile

Basi di dati I 19 luglio 2018 Compito A Domanda 5 (10%) Con riferimento ad una relazione Cittadini(CF, Nome, Reddito, TitoloDiStudio), scrivere le interrogazioni SQL che calcolano, per ciascun titolo di studio, il reddito medio dei cittadini che hanno tale titolo, nei due casi seguenti: si usa il valore nullo per indicare che il reddito non è noto Soluzione SELECT Qualifica, AVG(Reddito) AS RedditoMedia FROM Cittadini GROUP BY Qualifica si usa il valore -1 per indicare che il reddito non è noto Soluzione SELECT Qualifica, AVG(Reddito) AS RedditoMedia FROM Cittadini WHERE Reddito <> -1 GROUP BY Qualifica Domanda 6 (10%) Definire (con una opportuna notazione) su una relazione i vincoli che impongano le seguenti condizioni Retribuzioni(Matricola,Lordo,Imposte,StipNetto,Verifica) Il valore di Verifica è OK se e solo se StipNetto è uguale alla differenza fra Lordo e Imposte. CHECK (( ((Verifica = OK ) ) AND (StipNetto = Lordo - Imposte) ) OR ( ((Verifica <> OK ) ) AND (StipNetto <> Lordo - Imposte) ) Se il valore di Verifica è OK, allora StipNetto è uguale alla differenza fra Lordo e Imposte (si noti che in questo caso non si vuole invece imporre nessuna condizione se il valore di Verifica è diverso da OK ). CHECK ( (NOT (Verifica = OK ) ) OR (StipNetto = Lordo - Imposte) )

Basi di dati I 19 luglio 2018 Esame Compito B Durata: un ora e trenta minuti. Possibili soluzioni Cognome: Nome: Matricola: Domanda 1 (15%) Considerare le seguenti relazioni (tutte senza valori nulli) Prodotti (Codice, Nome, Prezzo) Magazzini (Codice, Nome, Città) Giacenze (Prodotto, Magazzino, Quantità), con vincoli di integrità referenziale fra Prodotto e la chiave di Prodotti e fra Magazzino e la chiave di Magazzini Ordini (Codice, Prodotto, Quantità), con vincolo di integrità referenziale fra Prodotto e la chiave di Prodotti Siano le seguenti le cardinalità delle relazioni Prodotti: cardinalità C P = 2000 Magazzini: cardinalità C M = 20 Giacenze: cardinalità C G = 15.000 Ordini: cardinalità C O = 5000 Indicare la cardinalità del risultato di ciascuna delle seguenti interrogazioni SQL, specificando l intervallo nel quale essa può variare; indicare simboli e numeri. Min (simboli e valore) Max (simboli e valore) select prodotto, magazzino from giacenze join prodotti p on prodotto = p.codice where prezzo > 100 0 0 C G 15.000 select p.codice as prodotto, m.codice as magazzino from prodotti p, magazzini m where prezzo > 100 0 0 C P C M 40.000 select prodotto, magazzino from giacenze join prodotti p on prodotto = p.codice join magazzini m on magazzino = m.codice C G 15.000 C G 15.000 select o.codice as ordine, prodotto, nome, quantita from ordini o join prodotti p on prodotto = p.codice where quantita > 5 0 0 C O 5000

Basi di dati I 19 luglio 2018 Compito B Domanda 2 (15%) Considerare la seguente base di dati sullo schema mostrato nella domanda precedente: Prodotti Codice Nome Prezzo 1 FrigoFreddo 1000 2 LavaBene 800 3 StiroTutto 50 4 PilaLungaDurata 1 Giacenze Prodotto Magazzino Quantità 1 11 3 1 12 2 2 11 1 3 11 10 4 11 100 4 12 200 4 13 150 4 14 150 Magazzini Codice Nome Città 11 Milano Centro Milano 12 Milano Fiera Milano 13 Italia Centrale Roma 14 Sud Caserta Ordini Codice Prodotto Quantità 101 1 2 102 2 2 103 2 1 104 3 1 105 4 500 106 4 300 Mostrare il risultato di ciascuna delle interrogazioni seguenti 1. select p.codice, nome, sum(quantita) as quantitaordinata from prodotti p join ordini o on p.codice=prodotto group by p.codice, nome 2. select codice, nome from prodotti p from magazzini m from giacenze where prodotto = p.codice and magazzino = m.codice))

Basi di dati I 19 luglio 2018 Compito B Domanda 3 (20%) Con riferimento allo schema di base di dati utilizzato nelle domande precedenti, formulare le seguenti interrogazioni in SQL 1. Trovare gli ordini che possono essere interamente soddisfatti con la giacenza in un magazzino (per i quali cioè esiste un magazzino che abbia, per il prodotto ordinato nell ordine, una giacenza maggiore o uguale alla quantità ordinata). Mostrare codice e nome tanto del prodotto quanto del magazzino e le due quantità. select o.codice as ordine, g.magazzino as codmagazzino, m.nome as magazzino, p.codice as codprodotto, p.nome as prodotto, o.quantita as quantitaordinata, g.quantita as quantitadisponibile from ordini o join giacenze g on o.prodotto = g.prodotto join prodotti p on o.prodotto = p.codice join magazzini m on g.magazzino =m.codice where o.quantita <= g.quantita 2. Trovare per ogni prodotto la quantità totale ordinata (cioè la somma delle quantità indicate nei vari ordini), mostrando codice del prodotto. select prodotto, sum(quantita) as totaleordinato from ordini group by prodotto 3. Trovare i magazzini che hanno giacenze (non è importante la quantità) di tutti i prodotti ordinati. Mostrare codice e nome dei magazzini. select codice, nome from magazzini m from prodotti p from giacenze g join ordini o on g.prodotto = o.prodotto where o.prodotto = p.codice and magazzino = m.codice))

Basi di dati I 19 luglio 2018 Compito B Domanda 4 (25%) Mostrare lo schema concettuale di una base di dati per un insieme di musei, secondo le seguenti specifiche. Ogni museo ha un nome, si trova in una città (della quale interessa anche la nazione, con relativa sigla) e ha una serie di sale, ognuna delle quali ha un nome e una dimensione. I musei espongono opere d arte, per ognuna delle quali interessano l autore (con codice, cognome, nome e nazione di nascita), l anno di esecuzione e la sala nella quale viene esposta (che si assume fissa: ogni opera si trova in una sala di un museo) Indicare almeno un identificatore per ogni entità (introducendo codici identificativi ogni volta lo si ritenga opportuno) e mostrare le cardinalità delle relationship Soluzione per il compito B, quella per l altro è molto simile

Basi di dati I 19 luglio 2018 Compito B Domanda 5 (10%) Con riferimento ad una relazione Impiegati(CF, Nome, Stipendio, TitoloDiStudio), scrivere le interrogazioni SQL che calcolano, per ciascun titolo di studio, lo stipendio medio degli impiegati che hanno tale titolo, nei due casi seguenti: si usa il valore nullo per indicare che lo stipendio non è noto Soluzione SELECT Qualifica, AVG(Stipendio) AS StipendioMedia FROM Impiegati GROUP BY Qualifica si usa il valore 0 per indicare che lo stipendio non è noto Soluzione SELECT Qualifica, AVG(Stipendio) AS StipendioMedia FROM Impiegati WHERE Stipendio <> 0 GROUP BY Qualifica Domanda 6 (10%) Definire (con una opportuna notazione) su una relazione i vincoli che impongano le seguenti condizioni Salari(Matricola,StipLordo,Trattenute,Netto,OK) Il valore di OK è OK se e solo se Netto è uguale alla differenza fra StipLordo e Trattenute. CHECK (( ((OK = OK ) ) AND (Netto = StipLordo - Trattenute) ) OR ( ((OK <> OK ) ) AND (Netto <> StipLordo - Trattenute) ) Se il valore di OK è OK, allora Netto è uguale alla differenza fra StipLordo e Trattenute (si noti che in questo caso non si vuole invece imporre nessuna condizione se il valore di OK è diverso da OK ). CHECK ( (NOT (OK = OK ) ) OR (Netto = StipLordo - Trattenute) )