Basi di Dati e Sistemi Informativi
Esercitazione:
Il Linguaggio SQL (DDL+DML)
Home page del corso:
http://www.cs.unibo.it/~difelice/dbsi/
Esercizio 1
➢ Scrivere il codice SQL dello schema
Codice Autore Conferenza Anno Formato Pagine
ARTICOLI
➢ Autore deve essere sempre definito.
➢ Conferenza è una stringa di lunghezza max 8.
➢ Formato è una stringa di lunghezza 3.
➢ Il numero di pagine deve essere sempre maggiore di 0, nel caso di omissione si assume pari ad 1.
Esercizio 1
CREATE TABLE ARTICOLI (
CODICE SMALLINT PRIMARY KEY, AUTORE VARCHAR(20) NOT NULL, CONFERENZA CHAR(8),
FORMATO CHAR(3), ANNO DATE,
PAGINE SMALLINT DEFAULT 1 CHECK (PAGINE>0)
);
Esercizio 1
➢ Scrivere il codice SQL dello schema
Nome Data Organizzatore NumPartecipanti
CONFERENZE
➢ Vincolo di integrita’: ARTICOLO.{Conferenza, Data} à CONFERENZA.{Nome, Data}
➢ Rimuovendo una conferenza da
CONFERENZE, vengono rimossi anche gli articoli corrispondenti
Esercizio 1
CREATE TABLE CONFERENZE ( NOME VARCHAR(8),
DATA DATE,
ORGANIZZATORE VARCHAR(20),
NUMPARTECIPANTI INTEGER CHECK (NUMPARTECIPANTI>0),
PRIMARY KEY(NOME,DATA) );
Esercizio 1
CREATE TABLE ARTICOLI (
CODICE SMALLINT PRIMARY KEY, AUTORE VARCHAR(20) NOT NULL, CONFERENZA CHAR(8),
FORMATO CHAR(3), DATA DATE,
PAGINE SMALLINT DEFAULT 1 CHECK (PAGINE>1)
FOREIGN KEY (CONFERENZA,DATA)
REFERENCES CONFERENZE(NOME, DATA) ON DELETE CASCADE
);
Esercizio 1
➢ Scrivere il codice SQL dello schema
NomeConf DataConf Nome Cognome Ruolo
PARTECIPANTE
➢ Vincolo di integrita’: PARTECIPANTE.
{NomeConf, DataConf} à CONFERENZA.
{Nome, Data}
➢ Ogni aggiornamento di {Nome, Data} nella
relazione CONFERENZA viene propagato anche alla relazione PARTECIPANTE.
Esercizio 1
CREATE TABLE PARTECIPANTE ( NOMECONF CHAR(8),
DATACONF DATE,
NOME VARCHAR(20),
COGNOME VARCHAR(30), RUOLO CHARACTER(3),
PRIMARY KEY (NOMECONF,DATACONF, NOME, COGNOME)
FOREIGN KEY (NOMECONF,DATACONF) REFERENCES CONFERENZE(NOME, DATA) ON UPDATE CASCADE
);
Esercizio 2
➢ Definire in SQL i seguenti domini:
1. Saldo: intero, compreso tra -200 e 200, valore di default pari a 5.
2. NomeUtente: stringa di max 10 caratteri,
valore di default pari al nome dell’utente che esegue le operazioni di inserimento dati.
Esercizio 2
➢ Definire in SQL i seguenti domini:
1. Saldo: intero, compreso tra -200 e 200, valore di default pari a 5.
2. NomeUtente: stringa di max 10 caratteri,
valore di default pari al nome dell’utente che esegue le operazioni di inserimento dati.
CREATE DOMAIN SALDO AS SMALLINT DEFAULT 5 CHECK (VALUE<200 AND VALUE> -200)
CREATE DOMAIN NOMEUTENTE AS VARCHAR(10) DEFAULT USER
Esercizio 3 (per casa) à
➢ Scrivere il codice SQL dello schema seguente:
Nome Cognome DataNascita Presenza Goal NSquadra
GIOCATORI
➢ Presenza è un intero, valore di default 0.
➢ Goal è un intero, valore di default 0, e può assumere valori compresi tra 0 e 30.
➢ Esiste un vincolo di integrità tra
GIOCATORI.Nsquadra e SQUADRE.Nome
Esercizio 3 (per casa) à
➢ Scrivere il codice SQL dello schema
Nome Campionato Data Fondazione Città
SQUADRE
➢ Nome è una stringa di lunghezza massima 20 caratteri.
➢ Campionato è un carattere, e può assumere solo i valori {A,B,C}.
➢ Città deve essere sempre definito
Esercizio 4.a
Dato il seguente schema:
CIRCOLI(Nome, Indirizzo, Anno, Telefono) UTENTI(Id, Nome, Cognome, AnnoNascita, Professionista)
ISCRIZIONI(IdUtente, NomeCircolo, Quota) Scrivere la query SQL che determina:
0.Nome ed indirizzo dei CIRCOLI fondati dal 2000 in poi.
Esercizio 4.a
Dato il seguente schema:
CIRCOLI(Nome, Indirizzo, Anno, Telefono) UTENTI(Id, Nome, Cognome, AnnoNascita, Professionista)
ISCRIZIONI(IdUtente, NomeCircolo, Quota) Scrivere la query SQL che determina:
1.Nome dei circoli che iniziano per “C” e che hanno come terza lettera la “s”.
Esercizio 4.a
Dato il seguente schema:
CIRCOLI(Nome, Indirizzo, Anno, Telefono) UTENTI(Id, Nome, Cognome, AnnoNascita, Professionista)
ISCRIZIONI(IdUtente, NomeCircolo, Quota) Scrivere la query SQL che determina:
2.Id degli Utenti iscritti al circolo “CUSB Tennis”
Esercizio 4.a
Dato il seguente schema:
CIRCOLI(Nome, Indirizzo, Anno, Telefono) UTENTI(Id, Nome, Cognome, AnnoNascita, Professionista)
ISCRIZIONI(IdUtente, NomeCircolo, Quota) Scrivere la query SQL che determina:
3.Nome e cognome degli Utenti iscritti al circolo “CUSB Tennis”
Esercizio 4.a
Dato il seguente schema:
CIRCOLI(Nome, Indirizzo, Anno, Telefono) UTENTI(Id, Nome, Cognome, AnnoNascita, Professionista)
ISCRIZIONI(IdUtente, NomeCircolo, Quota) Scrivere la query SQL che determina:
4.Numero degli utenti professionisti presenti nel database
Esercizio 4.a
Dato il seguente schema:
CIRCOLI(Nome, Indirizzo, Anno, Telefono) UTENTI(Id, Nome, Cognome, AnnoNascita, Professionista)
ISCRIZIONI(IdUtente, NomeCircolo, Quota) Scrivere la query SQL che determina:
5.Somma totale delle quote versate da utenti nati dal 2000 in poi
Esercizio 4.a
Dato il seguente schema:
CIRCOLI(Nome, Indirizzo, Anno, Telefono) UTENTI(Id, Nome, Cognome, AnnoNascita, Professionista)
ISCRIZIONI(IdUtente, NomeCircolo, Quota) Scrivere la query SQL che determina:
5.Quota media delle iscrizioni presso circoli “storico”. Un circolo si definisce storico se è stato fondato prima del 2000.
Esercizio 4.a
Dato il seguente schema:
CIRCOLI(Nome, Indirizzo, Anno, Telefono) UTENTI(Id, Nome, Cognome, AnnoNascita, Professionista)
ISCRIZIONI(IdUtente, NomeCircolo, Quota) Scrivere la query SQL che determina:
6.Per ogni utente, calcolare il numero di circoli a cui si è iscritti la somma totale delle quote di iscrizione versate
Esercizio 4.a
Dato il seguente schema:
CIRCOLI(Nome, Indirizzo, Anno, Telefono) UTENTI(Id, Nome, Cognome, AnnoNascita, Professionista)
ISCRIZIONI(IdUtente, NomeCircolo, Quota) Scrivere la query SQL che determina:
6.Id e nome degli utenti iscritti ad almeno due circoli
Esercizio 4.a
Dato il seguente schema:
CIRCOLI(Nome, Indirizzo, Anno, Telefono) UTENTI(Id, Nome, Cognome, AnnoNascita, Professionista)
ISCRIZIONI(IdUtente, NomeCircolo, Quota) Scrivere la query SQL che determina:
7 . Nome ed indirizzo dei circoli cui è iscritto l’utente con id pari a 4.
Esercizio 4.a
Dato il seguente schema:
CIRCOLI(Nome, Indirizzo, Anno, Telefono) UTENTI(Id, Nome, Cognome, AnnoNascita, Professionista)
ISCRIZIONI(IdUtente, NomeCircolo, Quota) Scrivere la query SQL che determina:
8 . Nome e cognome degli utenti che NON sono iscritti ad alcun circolo.
Esercizio 4.a
Dato il seguente schema:
CIRCOLI(Nome, Indirizzo, Anno, Telefono) UTENTI(Id, Nome, Cognome, AnnoNascita, Professionista)
ISCRIZIONI(IdUtente, NomeCircolo, Quota) Scrivere la query SQL che determina:
9 . Nome e indirizzo dei circoli che vantano SOLO utenti professionisti tra i propri iscritti.
Esercizio 4.b
Dato il seguente schema:
Atleta(Codice, Nome, Cognome, Societa’)
Gara(CodiceGara, Disciplina, Data, CodiceVincitore) Partecipazione(CodiceGara, CodiceAtleta)
Scrivere la query SQL che determina:
0.Nomi e cognomi di Atleti della societa’ Borgorosso.
Esercizio 4
Dato il seguente schema:
Atleta(Codice, Nome, Cognome, Societa’)
Gara(CodiceGara, Disciplina, Data, CodiceVincitore) Partecipazione(CodiceGara, CodiceAtleta)
Scrivere la query SQL che determina:
SELECT NOME, COGNOME FROM ATLETA
WHERE (SOCIETA’=‘Borgorosso’)
Esercizio 4.b
Dato il seguente schema:
Atleta(Codice, Nome, Cognome, Societa’)
Gara(CodiceGara, Disciplina, Data, CodiceVincitore) Partecipazione(CodiceGara, CodiceAtleta)
Scrivere la query SQL che determina:
1. Le righe della tabella ATLETA che si riferiscono ad atleti il cui nome inizia per “M” oppure non e’ specificato.
Esercizio 4.b
Dato il seguente schema:
Atleta(Codice, Nome, Cognome, Societa’)
Gara(CodiceGara, Disciplina, Data, CodiceVincitore) Partecipazione(CodiceGara, CodiceAtleta)
SELECT *
FROM ATLETA
WHERE ((Nome LIKE ‘M%’) OR (Nome IS NULL))
Esercizio 4.b
Dato il seguente schema:
Atleta(Codice, Nome, Cognome, Societa’)
Gara(CodiceGara, Disciplina, Data, CodiceVincitore) Partecipazione(CodiceGara, CodiceAtleta)
Scrivere la query SQL che determina:
2. Tutti i codici delle gare di Atletica cui partecipano atleti della societa’ “Borgorosso”.
Esercizio 4.b
Dato il seguente schema:
Atleta(Codice, Nome, Cognome, Societa’)
Gara(CodiceGara, Disciplina, Data, CodiceVincitore) Partecipazione(CodiceGara, CodiceAtleta)
SELECT CODICEGARA
FROM PARTECIPAZIONE, ATLETA
WHERE ((PARTECIPAZIONE.CODICEATLETA=
ATLETA.CODICE) AND
(SOCIETA’ = ‘BORGOROSSO’))
Esercizio 4.b
Dato il seguente schema:
Atleta(Codice, Nome, Cognome, Societa’)
Gara(CodiceGara, Disciplina, Data, CodiceVincitore) Partecipazione(CodiceGara, CodiceAtleta)
Scrivere la query SQL che determina:
3. Tutti i codici delle gare di Atletica cui partecipano atleti della societa’ “Borgorosso”, svolte in data 7/10/2013.
Esercizio 4.b
Dato il seguente schema:
Atleta(Codice, Nome, Cognome, Societa’)
Gara(CodiceGara, Disciplina, Data, CodiceVincitore) Partecipazione(CodiceGara, CodiceAtleta)
SELECT CODICEGARA
FROM PARTECIPAZIONE, ATLETA, GARA WHERE ((CODICEATLETA=CODICE) AND
(GARA.CODICEGARA=PARTECIPAZIONE.
CODICEGARA) AND
(SOCIETA’ = ‘BORGOROSSO’) AND (DATA=07/10/2013))
Esercizio 4.b
Dato il seguente schema:
Atleta(Codice, Nome, Cognome, Societa’)
Gara(CodiceGara, Disciplina, Data, CodiceVincitore) Partecipazione(CodiceGara, CodiceAtleta)
Scrivere la query SQL che determina:
4. I nomi delle societa’ i cui atleti hanno vinto una gara di LancioDelDisco. Filtrare i duplicati.
Esercizio 4.b
Dato il seguente schema:
Atleta(Codice, Nome, Cognome, Societa’)
Gara(CodiceGara, Disciplina, Data, CodiceVincitore) Partecipazione(CodiceGara, CodiceAtleta)
SELECT DISTINCT(SOCIETA’) FROM ATLETA, GARA
WHERE ((CODICEVINCITORE=CODICE) AND (DISCIPLINA=‘LANCIODELDISCO’))
Esercizio 4.b
Dato il seguente schema:
Atleta(Codice, Nome, Cognome, Societa’)
Gara(CodiceGara, Disciplina, Data, CodiceVincitore) Partecipazione(CodiceGara, CodiceAtleta)
Scrivere la query SQL che determina:
5. Il numero di gare svolte in data 7/10/2013.
Esercizio 4.b
Dato il seguente schema:
Atleta(Codice, Nome, Cognome, Societa’)
Gara(CodiceGara, Disciplina, Data, CodiceVincitore) Partecipazione(CodiceGara, CodiceAtleta)
SELECT COUNT(*) FROM GARA
WHERE (DATA=‘7/10/2013’)
Esercizio 4.b
Dato il seguente schema:
Atleta(Codice, Nome, Cognome, Societa’)
Gara(CodiceGara, Disciplina, Data, CodiceVincitore) Partecipazione(CodiceGara, CodiceAtleta)
Scrivere la query SQL che determina:
6. Per ogni societa’, il numero di atleti che ne fanno parte.
Esercizio 4.b
Dato il seguente schema:
Atleta(Codice, Nome, Cognome, Societa’)
Gara(CodiceGara, Disciplina, Data, CodiceVincitore) Partecipazione(CodiceGara, CodiceAtleta)
SELECT SOCIETA’, COUNT(*) AS NUMERO FROM ATLETA
GROUPBY SOCIETA’
Esercizio 4.b
Dato il seguente schema:
Atleta(Codice, Nome, Cognome, Societa’)
Gara(CodiceGara, Disciplina, Data, CodiceVincitore) Partecipazione(CodiceGara, CodiceAtleta)
Scrivere la query SQL che determina:
7. Le societa’ che hanno almeno 3 atleti tesserati.
Esercizio 4.b
Dato il seguente schema:
Atleta(Codice, Nome, Cognome, Societa’)
Gara(CodiceGara, Disciplina, Data, CodiceVincitore) Partecipazione(CodiceGara, CodiceAtleta)
SELECT SOCIETA’
FROM ATLETA
GROUPBY SOCIETA’
HAVING COUNT(*) >=3
Esercizio 4.b
Dato il seguente schema:
Atleta(Codice, Nome, Cognome, Societa’)
Gara(CodiceGara, Disciplina, Data, CodiceVincitore) Partecipazione(CodiceGara, CodiceAtleta)
Scrivere la query SQL che determina:
7. Gli atleti che hanno partecipato ad almeno 5 gare.
Esercizio 4.b
Dato il seguente schema:
Atleta(Codice, Nome, Cognome, Societa’)
Gara(CodiceGara, Disciplina, Data, CodiceVincitore) Partecipazione(CodiceGara, CodiceAtleta)
SELECT CODICE
FROM ATLETA, PARTECIPAZIONE WHERE (CODICEATLETA=CODICE) GROUPBY CODICE,CODICEATLETA HAVING (COUNT(*)>=5)
Esercizio 4.b
Dato il seguente schema:
Atleta(Codice, Nome, Cognome, Societa’)
Gara(CodiceGara, Disciplina, Data, CodiceVincitore) Partecipazione(CodiceGara, CodiceAtleta)
Scrivere la query SQL che determina:
8. Gli atleti che NON hanno mai partecipato ad una gara.
Esercizio 4.b
Dato il seguente schema:
Atleta(Codice, Nome, Cognome, Societa’)
Gara(CodiceGara, Disciplina, Data, CodiceVincitore) Partecipazione(CodiceGara, CodiceAtleta)
SELECT CODICE FROM ATLETA EXCEPT
SELECT DISTINCT(CODICEATLETA) FROM PARTECIPAZIONE
Esercizio 5
Dato il seguente schema:
Atleta(Codice, Nome, Cognome, Societa’), 50 elementi Gara(CodiceGara, Disciplina, Data, CodiceVincitore) Partecipazione(CodiceGara, CodiceAtleta)
1. Determinare la cardinalita’ (#righe) della query seguente:
SELECT CODICE FROM ATLETA
Esercizio 5
Dato il seguente schema:
Atleta(Codice, Nome, Cognome, Societa’), 50 elementi Gara(CodiceGara, Disciplina, Data, CodiceVincitore) Partecipazione(CodiceGara, CodiceAtleta)
1. Determinare la cardinalita’ (#righe) della query seguente:
SELECT CODICE FROM ATLETA
Cardinalita’ del risultato: 50
Esercizio 5
Dato il seguente schema:
Atleta(Codice, Nome, Cognome, Societa’), 50 elementi Gara(CodiceGara, Disciplina, Data, CodiceVincitore) Partecipazione(CodiceGara, CodiceAtleta)
2. Determinare la cardinalita’ (#righe) della query seguente:
SELECT DISTINCT(NOME) FROM ATLETA
Esercizio 5
Dato il seguente schema:
Atleta(Codice, Nome, Cognome, Societa’), 50 elementi Gara(CodiceGara, Disciplina, Data, CodiceVincitore) Partecipazione(CodiceGara, CodiceAtleta)
2. Determinare la cardinalita’ (#righe) della query seguente:
SELECT DISTINCT(NOME) FROM ATLETA
Cardinalita’ del risultato: 1<=x<=50
Esercizio 5
Dato il seguente schema:
Atleta(Codice, Nome, Cognome, Societa’), 50 elementi Gara(CodiceGara, Disciplina, Data, CodiceVincitore) Partecipazione(CodiceGara, CodiceAtleta)
3. Determinare la cardinalita’ (#righe) della query seguente:
SELECT DISTINCT(NOME) FROM ATLETA
WHERE (SOCIETA’ =‘Borgorosso’)
Esercizio 5
Dato il seguente schema:
Atleta(Codice, Nome, Cognome, Societa’), 50 elementi Gara(CodiceGara, Disciplina, Data, CodiceVincitore) Partecipazione(CodiceGara, CodiceAtleta)
3. Determinare la cardinalita’ (#righe) della query seguente:
SELECT DISTINCT(NOME) FROM ATLETA
WHERE (SOCIETA’ =‘Borgorosso’)
Cardinalita’ del risultato: 1<=x<=50
Esercizio 5
Dato il seguente schema:
Atleta(Codice, Nome, Cognome, Societa’), 50 elementi
Gara(CodiceGara, Disciplina, Data, CodiceVincitore), 20 el Partecipazione(CodiceGara, CodiceAtleta), 100 elementi 4. Determinare la cardinalita’ (#righe) della query seguente:
SELECT CODICEGARA
FROM PARTECIPAZIONE, ATLETA WHERE (CODICE=CODICEATLETA)
Esercizio 5
Dato il seguente schema:
Atleta(Codice, Nome, Cognome, Societa’), 50 elementi
Gara(CodiceGara, Disciplina, Data, CodiceVincitore), 20 el Partecipazione(CodiceGara, CodiceAtleta), 100 elementi 4. Determinare la cardinalita’ (#righe) della query seguente:
SELECT CODICEGARA
FROM PARTECIPAZIONE, ATLETA WHERE (CODICE=CODICEATLETA)
Cardinalita’ del risultato: 100
Esercizio 5
Dato il seguente schema:
Atleta(Codice, Nome, Cognome, Specialita’), 50 elementi Gara(CodiceGara, Disciplina, Data, CodiceVincitore), 20 el Partecipazione(CodiceGara, CodiceAtleta), 100 elementi 5. Determinare la cardinalita’ (#righe) della query seguente:
SELECT *
FROM GARA, ATLETA
WHERE (DISCIPLINA=SPECIALITA’)
Cardinalita’ del risultato: 0<=x<=50*20
Esercizio 6
Dato il seguente schema:
UTENTE(CF, Nome, Cognome, Via, Città)
PACCO(Codice, Peso, CFMittente, CFDestinatario, Stato) Scrivere la query SQL che costruisce la tabella PACCO:
1. Peso ha valore di default 0,1
2. CFMittente e CFDestinatario sono in vincolo di integrità referenziale con l’attributo CF della tabella UTENTE
3. Stato può essere “Lost”, “Delivered” o “Transit”
Esercizio 6
Dato il seguente schema:
UTENTE(CF, Nome, Cognome, Via, Città)
PACCO(Codice, Peso, CFMittente, CFDestinatario, Stato) Scrivere la query SQL che determina:
◇ Numero di pacchi di almeno 15 Kg spediti da utenti residenti a Bologna
Esercizio 6
Dato il seguente schema:
UTENTE(CF, Nome, Cognome, Via, Città)
PACCO(Codice, Peso, CFMittente, CFDestinatario, Stato) Scrivere la query SQL che determina:
◇ CF di utenti che non hanno MAI perso dei pacchi postali a loro destinati (se un pacco è perso, Stato=“Perso”)
Esercizio 6
Dato il seguente schema:
UTENTE(CF, Nome, Cognome, Via, Città)
PACCO(Codice, Peso, CFMittente, CFDestinatario, Stato) Scrivere la query SQL che determina:
◇ CF, Nome e Cognome di utenti di Bologna che hanno effettuato almeno 3 spedizioni
Esercizio 6
Dato il seguente schema:
UTENTE(CF, Nome, Cognome, Via, Città)
PACCO(Codice, Peso, CFMittente, CFDestinatario, Stato) Scrivere la query SQL che determina:
◇ Numero di spedizioni effettuate tra utenti che risiedono nella stessa città.
Esercizio 7 (per casa)
Dato il seguente schema:
Docente(Codice, Nome, Cognome)
Aula(Nome, Dipartimento, NumPosti)
Prenotazione(Data, NomeAula, CodDocente) Scrivere la query SQL che determina:
1. Nome e Cognome dei docenti che hanno prenotato l’aula
“Ercolani1” in data 13/10/2015.
Esercizio 7 (per casa)
Dato il seguente schema:
Docente(Codice, Nome, Cognome)
Aula(Nome, Dipartimento, NumPosti)
Prenotazione(Data, NomeAula, CodDocente) Scrivere la query SQL che determina:
2. Capienza massima tra le aule del dipartimento di Fisica, prenotate dal docente con codice 134.
Esercizio 7 (per casa)
Dato il seguente schema:
Docente(Codice, Nome, Cognome)
Aula(Nome, Dipartimento, NumPosti)
Prenotazione(Data, NomeAula, CodDocente) Scrivere la query SQL che determina:
3. Numero dei docenti che hanno prenotato aule del
Dipartimento di Matematica, nel periodo compreso tra il 13/06/2014 ed il 13/10/2014.
Esercizio 7 (per casa)
Dato il seguente schema:
Docente(Codice, Nome, Cognome)
Aula(Nome, Dipartimento, NumPosti)
Prenotazione(Data, NomeAula, CodDocente) Scrivere la query SQL che determina:
4. Codice del docente che ha prenotato almeno due aule (distinte) del Dipartimento di Fisica, in data 13/10/2014 (VINCOLO: non è possibile usare operatori aggregati!)
Esercizio 7 (per casa)
Dato il seguente schema:
Docente(Codice, Nome, Cognome)
Aula(Nome, Dipartimento, NumPosti)
Prenotazione(Data, NomeAula, CodDocente) Scrivere la query SQL che determina:
5. Codice, nome e cognome dei docenti che non hanno mai prenotato aule del dipartimento di Fisica.
Esercizio 7 (per casa)
Dato il seguente schema:
Docente(Codice, Nome, Cognome)
Aula(Nome, Dipartimento, NumPosti)
Prenotazione(Data, NomeAula, CodDocente) Scrivere la query SQL che determina:
6. Per ogni dipartimento, il numero di prenotazioni di aule nel periodo compreso tra il 17/10/2013 ed il 17/11/2014.
Esercizio 7 (per casa)
Dato il seguente schema:
Docente(Codice, Nome, Cognome)
Aula(Nome, Dipartimento, NumPosti)
Prenotazione(Data, NomeAula, CodDocente) Scrivere la query SQL che determina:
7. I codici dei docenti che hanno effettuato almeno 4 prenotazioni di aule del dipartimento di Fisica.
Esercizio 7 (per casa)
Dato il seguente schema:
Docente(Codice, Nome, Cognome)
Aula(Nome, Dipartimento, NumPosti)
Prenotazione(Data, NomeAula, CodDocente) Scrivere la query SQL che determina:
8. Codice, nome e cognome dei docenti che hanno effettuato prenotazioni di aule del dipartimento di Fisica.
(VINCOLO: solo 1 tabella nella clausola FROM)
Esercizio 7 (per casa)
Dato il seguente schema:
Docente(Codice, Nome, Cognome)
Aula(Nome, Dipartimento, NumPosti)
Prenotazione(Data, NomeAula, CodDocente) Scrivere la query SQL che determina:
9. Dipartimento che ospita l’aula con maggior numero di posti.
Esercizio 7 (per casa)
Dato il seguente schema:
Docente(Codice, Nome, Cognome)
Aula(Nome, Dipartimento, NumPosti)
Prenotazione(Data, NomeAula, CodDocente) Scrivere la query SQL che determina:
10. Nomi delle aule del dipartimento di Fisica che non sono state mai prenotate nel periodo dal 30/09/2013 al
30/09/2014.
Esercizio 7 (per casa)
Dato il seguente schema:
Docente(Codice, Nome, Cognome)
Aula(Nome, Dipartimento, NumPosti)
Prenotazione(Data, NomeAula, CodDocente) Scrivere la query SQL che determina:
11. Nome/i delle aule prenotate più della media (di tutte le altre aule), nel periodo compreso tra il 1/1/2013 ed il
31/12/2013
Esercizio 8
Dato il seguente schema:
Atleta(Codice, Nome, Cognome, DataNascita, Societa’) Allenatore(Codice, Nome, Cognome, Profilo, Societa’) Sportivi(Nome, Cognome, Societa’)
Scrivere la query SQL che:
1. Inserisce nella tabella sportivi l’utente “Michele Rossi”.
Esercizio 8
Dato il seguente schema:
Atleta(Codice, Nome, Cognome, DataNascita, Societa’) Allenatore(Codice, Nome, Cognome, Profilo, Societa’) Sportivi(Nome, Cognome, Societa’)
INSERT INTO SPORTIVI(NOME,COGNOME) VALUES (‘Michele’, ‘Rossi’)
Esercizio 8
Dato il seguente schema:
Atleti(Codice, Nome, Cognome, DataNascita, Societa’) Allenatori(Codice, Nome, Cognome, Profilo, Societa’) Sportivi(Nome, Cognome, Societa’)
Scrivere la query SQL che:
2. Popola la tabella Sportivi(Nome, Cognome, Societa’) come insieme di tutti gli atleti ed allenatori presenti nello schema.
Esercizio 8
Dato il seguente schema:
Atleti(Codice, Nome, Cognome, DataNascita, Societa’) Allenatori(Codice, Nome, Cognome, Profilo, Societa’) Sportivi(Nome, Cognome, Societa’)
Scrivere la query SQL che:
INSERT INTO SPORTIVI(NOME,COGNOME, SOCIETA’) (SELECT NOME,COGNOME,SOCIETA’
FROM ATLETI UNION
SELECT NOME,COGNOME,SOCIETA’
FROM ALLENATORI)
Esercizio 8
Dato il seguente schema:
Atleti(Codice, Nome, Cognome, DataNascita, Societa’) Allenatori(Codice, Nome, Cognome, Profilo, Societa’) Sportivi(Nome, Cognome, Societa’)
Scrivere la query SQL che:
3. Rimuove tutti gli allenatori la cui societa’ di appartenenza non e’ specificata.
Esercizio 8
Dato il seguente schema:
Atleti(Codice, Nome, Cognome, DataNascita, Societa’) Allenatori(Codice, Nome, Cognome, Profilo, Societa’) Sportivi(Nome, Cognome, Societa’)
Scrivere la query SQL che:
DELETE FROM ALLENATORI WHERE (SOCIETA’ IS NULL)
Esercizio 8
Dato il seguente schema:
Atleti(Codice, Nome, Cognome, DataNascita, Societa’) Allenatori(Codice, Nome, Cognome, Profilo, Societa’) Sportivi(Nome, Cognome, Societa’)
Scrivere la query SQL che:
4. Aggiorna i dati degli Atleti nati in data 10/11/2012,
settando il nuovo valore della societa’ a “Polisportiva Rossi”
Esercizio 8
Dato il seguente schema:
Atleti(Codice, Nome, Cognome, DataNascita, Societa’) Allenatori(Codice, Nome, Cognome, Profilo, Societa’) Sportivi(Nome, Cognome, Societa’)
Scrivere la query SQL che:
UPDATE ATLETI
SET SOCIETA’=‘POLISPORTIVA ROSSI’
WHERE DATANASCITA=’10/11/2012’
Esercizio 9
Dato il seguente schema:
IMPIEGATO(Matricola, Nome, Cognome, Stipendio, Direttore) DIPARTIMENTO(Codice, Direttore)
SELECT SUM(STIPENDIO) SELECT SUM(STIPENDIO)
FROM IMPIEGATO I FROM IMPIEGATO I, DIPARTIMENTO D WHERE I.DIRETTORE IN WHERE (I.DIRETTORE =
SELECT DIRETTORE D.DIRETTORE) FROM DIPARTIMENTO
Definire se le due query sono equivalenti.
Esercizio 10
Dato il seguente schema:
IMPIEGATO(Matricola, Nome, Cognome, Stipendio)
QUERY: Selezionare le matricole di impiegati che guadagnano piu’ di un qualche loro collega.
SELECT MATRICOLA FROM IMPIEGATO
WHERE (STIPENDIO SELECT STIPENDIO FROM IMPIEGATO)
Indicare una condizione valida!
Esercizio 10
Dato il seguente schema:
IMPIEGATO(Matricola, Nome, Cognome, Stipendio)
QUERY: Selezionare le matricole di impiegati che guadagnano piu’ di tutti i loro colleghi.
SELECT MATRICOLA FROM IMPIEGATO
WHERE (STIPENDIO SELECT STIPENDIO FROM IMPIEGATO)
Indicare una condizione valida!
Esercizio 10
Dato il seguente schema:
IMPIEGATO(Matricola, Nome, Cognome, Stipendio)
QUERY: Selezionare le matricole di impiegati che guadagnano tra i 20K ed i 30K.
SELECT MATRICOLA FROM IMPIEGATO
WHERE (MATRICOLA SELECT MATRICOLA FROM IMPIEGATO
WHERE (STIPENDIO IN (20000,30000)) Indicare una condizione valida!
Esercizio 11
Dato il seguente schema:
AEROPORTO(Id, Nazione, NumPiste)
VOLO(Codice, Partenza, Arrivo, ModAereo) AEREO(ModelloAereo, NumPasseggeri)
Vincoli di integrita’:
VOLO.Partenza à AEROPORTO.Id VOLO.Arrivo à AEROPORTO.Id
VOLO.ModAereo à AEREO.ModelloAereo
Scrivere la query SQL che determina:
1. Il totale dei passeggeri che hanno volato dalla Francia all’Italia.
Esercizio 11
Dato il seguente schema:
AEROPORTO(Id, Nazione, NumPiste)
VOLO(Codice, Partenza, Arrivo, ModAereo) AEREO(ModelloAereo, NumPasseggeri)
Vincoli di integrita’:
VOLO.Partenza à AEROPORTO.Id VOLO.Arrivo à AEROPORTO.Id
VOLO.ModAereo à AEREO.ModelloAereo
Scrivere la query SQL che determina:
2. Per ogni nazione, il numero di voli in partenza.
Esercizio 11
Dato il seguente schema:
AEROPORTO(Id, Nazione, NumPiste)
VOLO(Codice, Partenza, Arrivo, ModAereo) AEREO(ModelloAereo, NumPasseggeri)
Vincoli di integrita’:
VOLO.Partenza à AEROPORTO.Id VOLO.Arrivo à AEROPORTO.Id
VOLO.ModAereo à AEREO.ModelloAereo
Scrivere la query SQL che determina:
3. I modelli di aerei che volano da aeroporti francesi ad aeroporti italiani (VINCOLO: Max 1 tabella nel FROM)
Esercizio 11
Dato il seguente schema:
AEROPORTO(Id, Nazione, NumPiste)
VOLO(Codice, Partenza, Arrivo, ModAereo) AEREO(ModelloAereo, NumPasseggeri)
Vincoli di integrita’:
VOLO.Partenza à AEROPORTO.Id VOLO.Arrivo à AEROPORTO.Id
VOLO.ModAereo à AEREO.ModelloAereo
Scrivere la query SQL che determina:
4. Le nazioni da cui partono più di venti voli per l’Italia
Esercizio 11
Dato il seguente schema:
AEROPORTO(Id, Nazione, NumPiste)
VOLO(Codice, Partenza, Arrivo, ModAereo) AEREO(ModelloAereo, NumPasseggeri)
Vincoli di integrita’:
VOLO.Partenza à AEROPORTO.Id VOLO.Arrivo à AEROPORTO.Id
VOLO.ModAereo à AEREO.ModelloAereo
Scrivere la query SQL che determina:
5. L’aeroporto (id) da cui partono più voli diretti verso l’Italia rispetto alla media degli altri aeroporti.
Esercizio 12.a
Date le seguenti transazioni:
T0: r0(x) r0(y) r0(z) w0(z) C(T0)
T1: w1(y) w1(z) r1(a) r1(b) w1(a) A(T1) T2: r2(a) r2(b) w2(b) w2(a) C(T2)
Lo schedule seguente e’ uno schedule seriale:
➢w1(y) w1(z) r1(a) r1(b) w1(a) A(T1) r2(a) r2(b) w2(b) w2(a) C(T2) r0(x) r0(y) r0(z) w0(z) C(T0)
Esercizio 12.b
Date le seguenti transazioni:
T0: r0(x) r0(y) r0(z) w0(z) C(T0)
T1: w1(y) w1(z) r1(a) r1(b) w1(a) A(T1) T2: r2(a) r2(b) w2(b) w2(a) C(T2)
Il seguente schedule e’ uno schedule seriale:
➢w1(y) w1(z) r1(a) r2(a) r2(b) w2(b) w2(a) C(T2) r0(x) r0(y) r0(z) w0(z) C(T0) r1(b) w1(a) A(T1)
Esercizio 13
Sia x un oggetto del DB, con WTM(x)=5, RTM(x)=7.
Indicare il valore finale di WTM e RTM (TS-based), quali operazioni sono eseguite e quali abortite.
r4(x), r6(x), r17(x), w16(x), w18(x), w23(x), w29(x), r20(x), r30(x), r25(x)
Esercizio 14
Indicare gli insiemi di UNDO/REDO e le operazioni di recovery, se vengono eseguite le seguenti operazioni sul DB:
DUMP B(T1) B(T2) B(T3) I(T1,O1,A1) D(T2,O2,B2) B(T4) U(T4,O3,B3,A3)
U(T1,O4,B4,A4) C(T2) CK(T1,T3,T4) B(T5) B(T6) U(T5,O5,B5,A5) A(T3)
CK(T1,T4,T5,T6) B(T7) C(T4)
U(T7,O6,B6,A6) U(T6,O3,B7,A7) B(T8) A(T7) guasto
Esercizio 15
Dato il seguente schema:
VEICOLO(Targa, Modello, AnnoImmatricolazione) CLIENTI(NrPatente, Nome, Cognome, DataNascita) NOLEGGIO(TargaVeicolo, Data, PatenteCliente)
Scrivere la query SQL che determina:
2. Nome dei clienti (senza duplicati) che NON
hanno mai noleggiato una macchina (VINCOLO:
usare query annidate).
Esercizio 15
Dato il seguente schema:
VEICOLO(Targa, Modello, AnnoImmatricolazione) CLIENTI(NrPatente, Nome, Cognome, DataNascita) NOLEGGIO(TargaVeicolo, Data, PatenteCliente)
SELECT DISTINCT(Nome) FROM CLIENTI C
WHERE NOT EXIST ( SELECT *
FROM NOLEGGIO N
WHER (C.NRPATENTE=N.PATENTECLIENTE))
Esercizio 15
Dato il seguente schema:
VEICOLO(Targa, Modello, AnnoImmatricolazione) CLIENTI(NrPatente, Nome, Cognome, DataNascita) NOLEGGIO(TargaVeicolo, Data, PatenteCliente)
SELECT DISTINCT(Nome) FROM CLIENTI C
WHERE NRPATENTE NOT IN
SELECT PATENTECLIENTE FROM NOLEGGIO N
Esercizio 15
Dato il seguente schema:
VEICOLO(Targa, Modello, AnnoImmatricolazione) CLIENTI(NrPatente, Nome, Cognome, DataNascita) NOLEGGIO(TargaVeicolo, Data, PatenteCliente)
Scrivere la query SQL che determina:
3. Nome e cognome dei clienti che hanno
noleggiato piu’ macchine rispetto alla media (degli altri clienti).
Esercizio 15
CREATE VIEW TOTNOLEGGI(P, NUM) AS (
SELECT PATENTECLIENTE AS P, COUNT (*) AS NUM
FROM NOLEGGIO
GROUPBY PATENTECLIENTE )
SELECT NOME, COGNOME
FROM TOTNOLEGGI, CLIENTI
WHERE ((NUM > SELECT AVG(NUM) FROM TOTNOLEGGI) AND (P=NRPATENTE))