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 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>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
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 2
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 2
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 2
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 2
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 2
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 2
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 2
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 2
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 2
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 2
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 2
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 2
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 2
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 2
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 2
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 2
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 2
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 2
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 2
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 3
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 3
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 3
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 3
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 3
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 3
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 3
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 3
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 3
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 4
Dato il seguente schema:
Atleta(Codice, Nome, Cognome, Specialita’), 50 elementi
Gara(CodiceGara, Disciplina, Data, CodiceVincitore), 20 el
Partecipazione(CodiceGara, CodiceAtleta), 100 elementi
1. Determinare se la query seguente e’ corretta o meno.
SELECT COUNT(*)
FROM ATLETA, PARTECIPAZIONE
WHERE (CODICEATLETA=CODICE)
Esercizio 4
Dato il seguente schema:
Atleta(Codice, Nome, Cognome, Specialita’), 50 elementi
Gara(CodiceGara, Disciplina, Data, CodiceVincitore), 20 el
Partecipazione(CodiceGara, CodiceAtleta), 100 elementi
1. Determinare se la query seguente e’ corretta o meno.
SELECT COUNT(*)
FROM ATLETA, PARTECIPAZIONE
WHERE (CODICEATLETA=CODICE)
Esercizio 4
Dato il seguente schema:
Atleta(Codice, Nome, Cognome, Specialita’), 50 elementi
Gara(CodiceGara, Disciplina, Data, CodiceVincitore), 20 el
Partecipazione(CodiceGara, CodiceAtleta), 100 elementi
2. Determinare se la query seguente e’ corretta o meno.
SELECT CODICE, COUNT(*)
FROM ATLETA, PARTECIPAZIONE
WHERE (CODICEATLETA=CODICE)
Esercizio 4
Dato il seguente schema:
Atleta(Codice, Nome, Cognome, Specialita’), 50 elementi
Gara(CodiceGara, Disciplina, Data, CodiceVincitore), 20 el
Partecipazione(CodiceGara, CodiceAtleta), 100 elementi
2. Determinare se la query seguente e’ corretta o meno.
SELECT CODICE, COUNT(*)
FROM ATLETA, PARTECIPAZIONE
WHERE (CODICEATLETA=CODICE)
Esercizio 4
Dato il seguente schema:
Atleta(Codice, Nome, Cognome, Specialita’), 50 elementi
Gara(CodiceGara, Disciplina, Data, CodiceVincitore), 20 el
Partecipazione(CodiceGara, CodiceAtleta), 100 elementi
3. Determinare se la query seguente e’ corretta o meno.
SELECT CODICE, COUNT(*)
FROM ATLETA, PARTECIPAZIONE
WHERE (CODICEATLETA=CODICE)
GROUPBY CODICE
Esercizio 4
Dato il seguente schema:
Atleta(Codice, Nome, Cognome, Specialita’), 50 elementi
Gara(CodiceGara, Disciplina, Data, CodiceVincitore), 20 el
Partecipazione(CodiceGara, CodiceAtleta), 100 elementi
3. Determinare se la query seguente e’ corretta o meno.
SELECT CODICE, COUNT(*)
FROM ATLETA, PARTECIPAZIONE
WHERE (CODICEATLETA=CODICE)
GROUPBY CODICE
Esercizio 4
Dato il seguente schema:
Atleta(Codice, Nome, Cognome, Specialita’), 50 elementi
Gara(CodiceGara, Disciplina, Data, CodiceVincitore), 20 el
Partecipazione(CodiceGara, CodiceAtleta), 100 elementi
4. Determinare se la query seguente e’ corretta o meno.
SELECT NOME, COUNT(*)
FROM ATLETA, PARTECIPAZIONE
WHERE (CODICEATLETA=CODICE)
GROUPBY CODICE
Esercizio 4
Dato il seguente schema:
Atleta(Codice, Nome, Cognome, Specialita’), 50 elementi
Gara(CodiceGara, Disciplina, Data, CodiceVincitore), 20 el
Partecipazione(CodiceGara, CodiceAtleta), 100 elementi
4. Determinare se la query seguente e’ corretta o meno.
SELECT NOME, COUNT(*)
FROM ATLETA, PARTECIPAZIONE
WHERE (CODICEATLETA=CODICE)
GROUPBY CODICE
Esercizio 4
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 se la query seguente e’ corretta o meno.
SELECT NOME
FROM ATLETA, PARTECIPAZIONE
WHERE (CODICEATLETA=CODICE)
GROUPBY CODICE
HAVING (SPECIALITA’ ==‘ATLETICA’)
Esercizio 4
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 se la query seguente e’ corretta o meno.
SELECT NOME
FROM ATLETA, PARTECIPAZIONE
WHERE (CODICEATLETA=CODICE)
GROUPBY CODICE
HAVING (SPECIALITA’ ==‘ATLETICA’)
Esercizio 5
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 5
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 5
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 5
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 5
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 5
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 5
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 5
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 6
Dato il seguente schema:
AEROPORTO(Citta’, Nazione, NumPiste)
VOLO(IdVolo, Data, CittaPart, CittaArr, TipoAereo)
AEREO(ModelloAereo, NumPasseggeri)
Vincoli di integrita’:
VOLO.CittaPart AEROPORTO.Citta’
VOLO.CittaArr AEROPORTO.Citta’
VOLO.TipoAereo AEREO.ModelloAereo
Scrivere la query SQL che determina:
1. Per ogni nazione, il numero di voli in partenza.
Esercizio 6
Dato il seguente schema:
AEROPORTO(Citta’, Nazione, NumPiste)
VOLO(IdVolo, Data, CittaPart, CittaArr, TipoAereo)
AEREO(ModelloAereo, NumPasseggeri)
Vincoli di integrita’:
VOLO.CittaPart AEROPORTO.Citta’
VOLO.CittaArr AEROPORTO.Citta’
VOLO.TipoAereo AEREO.ModelloAereo
Scrivere la query SQL che determina:
2. Le citta’ francesi da cui partono piu’ di venti voli alla
settimana diretti per l’Italia
Esercizio 6
Dato il seguente schema:
AEROPORTO(Citta’, Nazione, NumPiste)
VOLO(IdVolo, Data, CittaPart, CittaArr, TipoAereo)
AEREO(ModelloAereo, NumPasseggeri)
Vincoli di integrita’:
VOLO.CittaPart AEROPORTO.Citta’
VOLO.CittaArr AEROPORTO.Citta’
VOLO.TipoAereo AEREO.ModelloAereo
Scrivere la query SQL che determina:
3. Il massimo numero di passeggeri che possono arrivare
dalla Francia in Italia (con un solo volo).
Esercizio 6
Dato il seguente schema:
AEROPORTO(Citta’, Nazione, NumPiste)
VOLO(IdVolo, Data, CittaPart, CittaArr, TipoAereo)
AEREO(ModelloAereo, NumPasseggeri)
Vincoli di integrita’:
VOLO.CittaPart AEROPORTO.Citta’
VOLO.CittaArr AEROPORTO.Citta’
VOLO.TipoAereo AEREO.ModelloAereo
Scrivere la query SQL che determina:
4. Il massimo numero di passeggeri che possono arrivare
dalla Francia in Italia (sommando tutti i voli).
Esercizio 6
Dato il seguente schema:
AEROPORTO(Citta’, Nazione, NumPiste)
VOLO(IdVolo, Data, CittaPart, CittaArr, TipoAereo)
AEREO(ModelloAereo, NumPasseggeri)
Vincoli di integrita’:
VOLO.CittaPart AEROPORTO.Citta’
VOLO.CittaArr AEROPORTO.Citta’
VOLO.TipoAereo AEREO.ModelloAereo
Scrivere la query SQL che determina:
5. Le citta’ servite dall’aereo con numero minimo di
passeggeri.
Esercizio 7
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 8.a
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 8.b
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 8.c
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 9
Dato il seguente schema:
VEICOLO(Targa, Modello, AnnoImmatricolazione)
CLIENTI(NrPatente, Nome, Cognome, DataNascita)
NOLEGGIO(TargaVeicolo, Data, PatenteCliente)
Scrivere la query SQL che determina:
1. Nome dei clienti (senza duplicati) che hanno
noleggiato macchine in data 15/01/2013
(VINCOLO: usare query annidate).
Esercizio 9
Dato il seguente schema:
VEICOLO(Targa, Modello, AnnoImmatricolazione)
CLIENTI(NrPatente, Nome, Cognome, DataNascita)
NOLEGGIO(TargaVeicolo, Data, PatenteCliente)
SELECT DISTINCT(NOME)
FROM CLIENTI
WHERE NRPATENTE = ANY
(SELECT PATENTECLIENTE
FROM NOLEGGIO
WHERE (Data = “15/01/2013”) )
)
Esercizio 9
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 9
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 9
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 9
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 9
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))
Esercizio 10
Dato il seguente schema:
PROFESSORE(Codice, Nome, Cognome, Dipartimento,
Qualifica, Stipendio)
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 10
Dato il seguente schema:
PROFESSORE(Codice, Nome, Cognome, Dipartimento,
Qualifica, Stipendio)
CREATE ASSERTION VINCOLO1 CHECK
(30 <= ALL (SELECT COUNT(*)
FROM PROFESSORE
GROUPBY DIPARTIMENTO))
Esercizio 10
Dato il seguente schema:
PROFESSORE(Codice, Nome, Cognome, Dipartimento,
Qualifica, Stipendio)
CREATE ASSERTION VINCOLO2 CHECK
(25000 <= ALL (SELECT AVG(STIPENDIO)
FROM PROFESSORE
GROUPBY DIPARTIMENTO))
Esercizio 11
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 11
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 11
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.