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
ARTICOLI
Codice
Autore
Conferenza
Anno
Formato
Pagine
 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
CONFERENZE
Nome
Data
Organizzatore
NumPartecipanti
 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
PARTECIPANTE
NomeConf
DataConf
Nome
Cognome
Ruolo
 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:
GIOCATORI
Nome
Cognome
DataNascita
Presenza
Goal
NSquadra
 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
SQUADRE
Nome
Campionat
o
Data Fondazione
Città
 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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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 2
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
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
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
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
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 (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 6 (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 6 (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 6 (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 6 (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 6 (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 6 (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 6 (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 6 (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 6 (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 6 (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 7
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 7
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 7
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 7
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 7
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 7
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 7
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 7
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 8
Dato il seguente schema:
IMPIEGATO(Matricola, Nome, Cognome, Stipendio, Direttore)
DIPARTIMENTO(Codice, Direttore)
SELECT SUM(STIPENDIO)
FROM IMPIEGATO I
WHERE I.DIRETTORE IN
SELECT DIRETTORE
FROM DIPARTIMENTO
SELECT SUM(STIPENDIO)
FROM IMPIEGATO I, DIPARTIMENTO D
WHERE (I.DIRETTORE =
D.DIRETTORE)
Definire se le due query sono equivalenti.
Esercizio 9
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
Indicare una condizione valida!
SELECT STIPENDIO
FROM IMPIEGATO)
Esercizio 9
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
Indicare una condizione valida!
SELECT STIPENDIO
FROM IMPIEGATO)
Esercizio 9
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
Indicare una condizione valida!
SELECT MATRICOLA
FROM IMPIEGATO
WHERE (STIPENDIO IN (20000,30000))
Esercizio 10
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 10
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 10
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 10
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 10
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 10.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 10.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 11
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 12
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 13
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 13
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 13
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 13
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 13
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))
Scarica

PPT - Dipartimento di Informatica