Basi di Dati e Sistemi
Informativi
Esercitazione:
Il Linguaggio SQL
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 e’ una stringa di lunghezza max 8.
Formato e’ 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>1)
);
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
Dato il seguente schema:
Atleta(Codice, Nome, Cognome, DataNascita, Societa’)
Gara(CodiceGara, Disciplina, Data, CodiceVincitore)
Partecipazione(CodiceGara, CodiceAtleta)
Societa’(Nome, Sede, Anno, NumeroTrofei)
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 2
Dato il seguente schema:
Atleta(Codice, Nome, Cognome, DataNascita, Societa’)
Gara(CodiceGara, Disciplina, Data, CodiceVincitore)
Partecipazione(CodiceGara, CodiceAtleta)
Societa’(Nome, Sede, Anno, NumeroTrofei)
Scrivere la query SQL che determina:
2. Tutti i codici delle gare di Atletica cui partecipano atleti
della societa’ “Borgorosso”.
Esercizio 2
Dato il seguente schema:
Atleta(Codice, Nome, Cognome, DataNascita, Societa’)
Gara(CodiceGara, Disciplina, Data, CodiceVincitore)
Partecipazione(CodiceGara, CodiceAtleta)
Societa’(Nome, Sede, Anno, NumeroTrofei)
Scrivere la query SQL che determina:
3. Tutti i nomi/cognomi degli atleti che partecipano ad
almeno due gare.
Esercizio 2
Dato il seguente schema:
Atleta(Codice, Nome, Cognome, DataNascita, Societa’)
Gara(CodiceGara, Disciplina, Data, CodiceVincitore)
Partecipazione(CodiceGara, CodiceAtleta)
Societa’(Nome, Sede, Anno, NumeroTrofei)
Scrivere la query SQL che determina:
4. Il numero totale di Discipline cui ha partecipato l’atleta
234 nella Gara identificata dal codice 12.
Esercizio 2
Dato il seguente schema:
Atleta(Codice, Nome, Cognome, DataNascita, Societa’)
Gara(CodiceGara, Disciplina, Data, CodiceVincitore)
Partecipazione(CodiceGara, CodiceAtleta)
Societa’(Nome, Sede, Anno, NumeroTrofei)
Scrivere la query SQL che determina:
5. Per ogni societa’, il numero totale di gare vinte.
Esercizio 2
Dato il seguente schema:
Atleta(Codice, Nome, Cognome, DataNascita, Societa’)
Gara(CodiceGara, Disciplina, Data, CodiceVincitore)
Partecipazione(CodiceGara, CodiceAtleta)
Societa’(Nome, Sede, Anno, NumeroTrofei, Presidente)
Scrivere la query SQL che determina:
6. Il nome dei presidenti di societa’ che hanno vinto piu’ di
4 gare svolte in data 10/11/2012.
Esercizio 3
Dato il seguente schema:
Atleta(Codice, Nome, Cognome, DataNascita, Societa’)
Allenatore(Codice, Nome, Cognome, Profilo, Societa’)
Preparazione(CodiceAtleta, CodiceAllenatore)
Societa’(Nome, Sede, Anno, NumeroTrofei, Presidente)
Sportivi(Nome, Cognome, Societa’)
Scrivere la query SQL che:
1. Popola la tabella Sportivi(Nome, Cognome, Societa’)
come insieme di tutti gli atleti ed allenatori presenti nello
schema.
Esercizio 3
Dato il seguente schema:
Atleta(Codice, Nome, Cognome, DataNascita, Societa’)
Allenatore(Codice, Nome, Cognome, Profilo, Societa’)
Preparazione(CodiceAtleta, CodiceAllenatore)
Societa’(Nome, Sede, Anno, NumeroTrofei, Presidente)
Scrivere la query SQL che:
2. Aggiorna i dati degli Atleti nati in data 10/11/2012,
settando il nuovo valore della societa’ a “Polisportiva
Rossi”.
Esercizio 3
Dato il seguente schema:
Atleta(Codice, Nome, Cognome, DataNascita, Societa’)
Allenatore(Codice, Nome, Cognome, Profilo, Societa’)
Preparazione(CodiceAtleta, CodiceAllenatore)
Societa’(Nome, Sede, Anno, NumeroTrofei, Presidente)
Scrivere la query SQL che:
3. Rimuove tutti gli allenatori la cui societa’ di appartenenza
non e’ specificata.
Esercizio 4
Dato il seguente schema:
Persona(Nome, DataNascita, CittaNascita, CodiceFiscale)
Discendenza(Figlio, Padre)
Matrimonio (Marito, Moglie, Citta’, Data)
Scrivere la query SQL che determina:
1. Il numero di persone nate a Bologna nell’anno 1985.
Esercizio 4
Dato il seguente schema:
Persona(Nome, AnnoNascita, CittaNascita, CodiceFiscale)
Discendenza(Figlio, Padre)
Matrimonio (Marito, Moglie, Citta’, Anno)
Scrivere la query SQL che determina:
2. Il totale di matrimoni svolti ogni anno a Bologna.
Esercizio 4
Dato il seguente schema:
Persona(Nome, AnnoNascita, CittaNascita, CodiceFiscale)
Discendenza(Figlio, Padre)
Matrimonio (Marito, Moglie, Citta’, Anno)
Scrivere la query SQL che determina:
3. Il numero di persone che si chiamano Michele e non
hanno figli.
Esercizio 5
Dato il seguente schema:
FILM (CodFilm, Titolo, AnnoProduzione, Nazionalità,
Regista, Genere)
PROIEZIONI (CodProiezione, CodFilm, CodSala, Incasso,
DataProiezione)
SALE (CodSala, Posti, Nome, Città)
Scrivere la query SQL che determina:
1. Per ogni citta’, il numero di sale con piu’ di 60 posti.
Esercizio 5
Dato il seguente schema:
FILM (CodFilm, Titolo, AnnoProduzione, Nazionalità,
Regista, Genere)
PROIEZIONI (CodProiezione, CodFilm, CodSala, Incasso,
DataProiezione)
SALE (CodSala, Posti, Nome, Città)
Scrivere la query SQL che determina:
2. Il numero totale dei posti dei cinema di Bologna.
Esercizio 5
Dato il seguente schema:
FILM (CodFilm, Titolo, AnnoProduzione, Nazionalità,
Regista, Genere)
PROIEZIONI (CodProiezione, CodFilm, CodSala, Incasso,
DataProiezione)
SALE (CodSala, Posti, Nome, Città)
Scrivere la query SQL che determina:
3. Per ogni regista, la somma totale degli incassi totalizzati
dai suoi film.
Esercizio 5
Dato il seguente schema:
FILM (CodFilm, Titolo, AnnoProduzione, Nazionalità,
Regista, Genere)
PROIEZIONI (CodProiezione, CodFilm, CodSala, Incasso,
DataProiezione)
SALE (CodSala, Posti, Nome, Città)
Scrivere la query SQL che determina:
4. Per ogni citta’, gli incassi di film Italiani proietattati in
data 10/11/2012.
Esercizio 5
Dato il seguente schema:
AEROPORTO(Citta’, Nazione, NumPiste)
VOLO(IdVolo, GiornoSett, CittaPart, CittaArr, TipoAereo,
OraPartenza, OraArrivo)
AEREO(TipoAereo, NumPasseggeri, QtaMerci)
Scrivere la query SQL che determina:
1. Le citta’ con un aeroporto di cui non e’ noto il numero di
piste.
Esercizio 5
Dato il seguente schema:
AEROPORTO(Citta’, Nazione, NumPiste)
VOLO(IdVolo, GiornoSett, CittaPart, CittaArr, TipoAereo,
OraPartenza, OraArrivo)
AEREO(TipoAereo, NumPasseggeri, QtaMerci)
Scrivere la query SQL che determina:
2. Le nazioni da cui parte ed arriva il volo con codice
AZ1343.
Esercizio 5
Dato il seguente schema:
AEROPORTO(Citta’, Nazione, NumPiste)
VOLO(IdVolo, GiornoSett, CittaPart, CittaArr, TipoAereo,
OraPartenza, OraArrivo)
AEREO(TipoAereo, NumPasseggeri, QtaMerci)
Scrivere la query SQL che determina:
3. I tipi di aereo usati nei voli che partono da Torino.
Esercizio 5
Dato il seguente schema:
AEROPORTO(Citta’, Nazione, NumPiste)
VOLO(IdVolo, GiornoSett, CittaPart, CittaArr, TipoAereo,
OraPartenza, OraArrivo)
AEREO(TipoAereo, NumPasseggeri, QtaMerci)
Scrivere la query SQL che determina:
4. Il numero di voli internazionali che partono da Napoli.
Esercizio 5
Dato il seguente schema:
AEROPORTO(Citta’, Nazione, NumPiste)
VOLO(IdVolo, GiornoSett, CittaPart, CittaArr, TipoAereo,
OraPartenza, OraArrivo)
AEREO(TipoAereo, NumPasseggeri, QtaMerci)
Scrivere la query SQL che determina:
5. La quantita’ totale di merci trasportata da aerei che
partono ogni giovedi’ da Napoli e diretti in aeroporti
italiani.
Esercizio 5
Dato il seguente schema:
AEROPORTO(Citta’, Nazione, NumPiste)
VOLO(IdVolo, GiornoSett, CittaPart, CittaArr, TipoAereo,
OraPartenza, OraArrivo)
AEREO(TipoAereo, NumPasseggeri, QtaMerci)
Scrivere la query SQL che determina:
6. Le citta’ francesi da cui partono piu’ di venti voli alla
settimana diretti per l’Italia.
Esercizio 5
Dato il seguente schema:
AEROPORTO(Citta’, Nazione, NumPiste)
VOLO(IdVolo, GiornoSett, CittaPart, CittaArr, TipoAereo,
OraPartenza, OraArrivo)
AEREO(TipoAereo, NumPasseggeri, QtaMerci)
Scrivere la query SQL che determina:
6. Le citta’ servite dall’aereo con numero minimo di
passeggeri.
Esercizio 5
Dato il seguente schema:
AEROPORTO(Citta’, Nazione, NumPiste)
VOLO(IdVolo, GiornoSett, CittaPart, CittaArr, TipoAereo,
OraPartenza, OraArrivo)
AEREO(TipoAereo, NumPasseggeri, QtaMerci)
Scrivere la query SQL che determina:
7. Il massimo numero di passeggeri che possono arrivare
dalla Francia in Italia il giovedi’.
Esercizio 6
Dato il seguente schema:
NEGOZI(IdNegozio, Nome, Citta)
PRODOTTI(CodProdotto, NomeProdotto, Marca)
LISTINO(Negozio, CodProdotto, Prezzo)
FORNITORE(Codice, Nome, Cognome, Sede)
RIFORNIMENTO(CodiceFornitore,Negozio)
Scrivere la query SQL che determina:
1. L’id dei negozi che vendono il prodotto con codice 123
ad un prezzo superiore alla media (calcolata sui listini di
tutti i negozi).
Esercizio 6
Dato il seguente schema:
NEGOZI(IdNegozio, Nome, Citta)
PRODOTTI(CodProdotto, NomeProdotto, Marca)
LISTINO(Negozio, CodProdotto, Prezzo)
FORNITORE(Codice, Nome, Cognome, Sede)
RIFORNIMENTO(CodiceFornitore,Negozio)
Scrivere la query SQL che determina:
2. Il codice dei prodotti venduti in una sola citta’.
Esercizio 6
Dato il seguente schema:
NEGOZI(IdNegozio, Nome, Citta)
PRODOTTI(CodProdotto, NomeProdotto, Marca)
LISTINO(Negozio, CodProdotto, Prezzo)
FORNITORE(Codice, Nome, Cognome, Sede)
RIFORNIMENTO(CodiceFornitore,Negozio)
Scrivere la query SQL che determina:
3. La citta’ in cui viene venduto al prezzo + basso il
prodotto con codice 123.
Esercizio 6
Dato il seguente schema:
NEGOZI(IdNegozio, Nome, Citta)
PRODOTTI(CodProdotto, NomeProdotto, Marca)
LISTINO(Negozio, CodProdotto, Prezzo)
FORNITORE(Codice, Nome, Cognome, Sede)
RIFORNIMENTO(CodiceFornitore,Negozio)
Scrivere la query SQL che determina:
4. Nome/Cognome dei fornitori che NON riforniscono
alcun negozio di Bologna.
Esercizio 7
Dato il seguente schema:
STADIO(Nome, Citta, Capienza)
INCONTRO(NomeStadio, Data, Ora, Squadra1, Squadra2)
NAZIONALE(Nazione, Continente, Livello)
Scrivere la query SQL che determina:
1. La citta/le citta in cui si trova lo stadio in cui la squadra
inglese gioca il maggior numero di partite.
Esercizio 7
Dato il seguente schema:
STADIO(Nome, Citta, Capienza)
INCONTRO(NomeStadio, Data, Ora, Squadra1, Squadra2)
NAZIONALE(Nazione, Continente, Livello)
Scrivere la query SQL che determina:
2. I nomi degli stadi in cui non gioca nessuna squadra
europea.
Esercizio 7
Dato il seguente schema:
STADIO(Nome, Citta, Capienza)
INCONTRO(NomeStadio, Data, Ora, Squadra1, Squadra2)
NAZIONALE(Nazione, Continente, Livello)
Scrivere la query SQL che determina:
3. La capienza complessiva degli stadi in cui gioca una
nazione europea.
Esercizio 7
Dato il seguente schema:
STADIO(Nome, Citta, Capienza)
INCONTRO(NomeStadio, Data, Ora, Squadra1, Squadra2)
NAZIONALE(Nazione, Continente, Livello)
Scrivere la query SQL che determina:
4. I nomi delle squadre che incontrano solo squadre dello
stesso livello.
Esercizio 8
Dato il seguente schema:
PROFESSORE(Codice, Nome, Cognome, Dipartimento,
Qualifica, Stipendio)
CORSO(CodiceCorso, CodiceProf, OreCorso)
0. Costruire il codice SQL dello schema, definendo i vincoli
di chiave di ciascuna tabella e gli eventuali vincoli di
integrita’ inter-relazionali esistenti.
- Definire un dominio per CodiceCorso come: stringa,
lunghezza 6 caratteri, la stringa deve iniziare per “C” e
terminare per “00”.
Esercizio 8
Dato il seguente schema:
PROFESSORE(Codice, Nome, Cognome, Dipartimento,
Qualifica, Stipendio)
CORSO(CodiceCorso, CodiceProf, OreCorso)
0. Costruire il codice SQL dello schema, definendo i vincoli
di chiave di ciascuna tabella e gli eventuali vincoli di
integrita’ inter-relazionali esistenti.
- Ogni aggiornamento del CodiceCorso della tabella
CORSO deve essere propagato anche all’attributo Codice
della tabella PROFESSORE.
Esercizio 8
Dato il seguente schema:
PROFESSORE(Codice, Nome, Cognome, Dipartimento,
Qualifica, Stipendio)
CORSO(CodiceCorso, CodiceProf, OreCorso)
Definire il seguente vincolo sullo schema:
1. Ogni dipartimento deve avere almeno 30 professori, e lo
stipendio medio in ogni dipartimento deve essere inferiore a
25000 euro.
Esercizio 8
Dato il seguente schema:
PROFESSORE(Codice, Nome, Cognome, Dipartimento,
Qualifica, Stipendio)
CORSO(CodiceCorso, CodiceProf, OreCorso)
Definire il seguente vincolo sullo schema:
2. I professori ordinari dovrebbero insegnare per almeno 120
ore, mentre i ricercatori non dovrebbero superare le 60 ore
di lezione.
Esercizio 8
Dato il seguente schema:
PROFESSORE(Codice, Nome, Cognome, Dipartimento,
Qualifica, Stipendio)
CORSO(CodiceCorso, CodiceProf, OreCorso)
Definire il seguente vincolo sullo schema:
3. Ogni volta che si rimuove una riga dalla tabella
PROFESSORI, se il totale dei Professori diventa minore di
20 per il dipartimento di Informatica, devono essere rimossi
tutti i CORSI tenuti da professori di Informatica.
Esercizio 8
Dato il seguente schema:
PROFESSORE(Codice, Nome, Cognome, Dipartimento,
Qualifica, Stipendio)
CORSO(CodiceCorso, CodiceProf, OreCorso)
Definire il seguente vincolo sullo schema:
4. Definire una vista
DIPARTIMENTIARISCHIO(Dipartimento, MonteOre),
definita come l’insieme dei dipartimenti in cui il totale delle
ore di lezione svolte da docenti di quel dipartimento sia
inferiore a 400.
Esercizio 8
Dato il seguente schema:
ATLETA(Nome, Nazione, Eta’)
PARTECIPAZIONE(NomeAtleta, NomeGara, Piazzamento)
GARA(Nome, Nazione)
Scrivere la query SQL che determina:
1. Il nome degli atleti che hanno gareggiato solo nella
propria nazione.
Esercizio 8
Dato il seguente schema:
ATLETA(Nome, Nazione, Eta’)
PARTECIPAZIONE(NomeAtleta, NomeGara, Piazzamento)
GARA(Nome, Nazione)
Scrivere la query SQL che determina:
2. Il nome degli atleti che provengono da una nazione in cui
non si svolge alcuna gara.
Esercizio 8
Dato il seguente schema:
ATLETA(Nome, Nazione, Eta’)
PARTECIPAZIONE(NomeAtleta, NomeGara, Piazzamento)
GARA(Nome, Nazione)
Scrivere la query SQL che determina:
3. Il nome degli atleti che hanno preso parte a tutte le gare
svolte in Francia.