Basi di Dati e Sistemi Informativi Esercitazione: Il Linguaggio SQL (DDL+DML) Home page del corso:...

78
Basi di Dati e Sistemi Informativi Esercitazione: Il Linguaggio SQL (DDL+DML) Home page del corso: http://www.cs.unibo.it/~difelice/dbsi/

Transcript of Basi di Dati e Sistemi Informativi Esercitazione: Il Linguaggio SQL (DDL+DML) Home page del corso:...

Page 1: Basi di Dati e Sistemi Informativi Esercitazione: Il Linguaggio SQL (DDL+DML) Home page del corso: difelice/dbsi

Basi di Dati e Sistemi

Informativi

Esercitazione:Il Linguaggio SQL (DDL+DML)

Home page del corso:

http://www.cs.unibo.it/~difelice/dbsi/

Page 2: Basi di Dati e Sistemi Informativi Esercitazione: Il Linguaggio SQL (DDL+DML) Home page del corso: difelice/dbsi

Esercizio 1

Scrivere il codice SQL dello schema

Codice Autore

Conferenza

Anno Formato Pagine

ARTICOLI

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.

Page 3: Basi di Dati e Sistemi Informativi Esercitazione: Il Linguaggio SQL (DDL+DML) Home page del corso: difelice/dbsi

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));

Page 4: Basi di Dati e Sistemi Informativi Esercitazione: Il Linguaggio SQL (DDL+DML) Home page del corso: difelice/dbsi

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

Page 5: Basi di Dati e Sistemi Informativi Esercitazione: Il Linguaggio SQL (DDL+DML) Home page del corso: difelice/dbsi

Esercizio 1

CREATE TABLE CONFERENZE (NOME VARCHAR(8),DATA DATE,ORGANIZZATORE VARCHAR(20),NUMPARTECIPANTI INTEGER CHECK(NUMPARTECIPANTI>0),

PRIMARY KEY(NOME,DATA));

Page 6: Basi di Dati e Sistemi Informativi Esercitazione: Il Linguaggio SQL (DDL+DML) Home page del corso: difelice/dbsi

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

);

Page 7: Basi di Dati e Sistemi Informativi Esercitazione: Il Linguaggio SQL (DDL+DML) Home page del corso: difelice/dbsi

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.

Page 8: Basi di Dati e Sistemi Informativi Esercitazione: Il Linguaggio SQL (DDL+DML) Home page del corso: difelice/dbsi

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

);

Page 9: Basi di Dati e Sistemi Informativi Esercitazione: Il Linguaggio SQL (DDL+DML) Home page del corso: difelice/dbsi

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.

Page 10: Basi di Dati e Sistemi Informativi Esercitazione: Il Linguaggio SQL (DDL+DML) Home page del corso: difelice/dbsi

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, COGNOMEFROM ATLETAWHERE (SOCIETA’=‘Borgorosso’)

Page 11: Basi di Dati e Sistemi Informativi Esercitazione: Il Linguaggio SQL (DDL+DML) Home page del corso: difelice/dbsi

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.

Page 12: Basi di Dati e Sistemi Informativi Esercitazione: Il Linguaggio SQL (DDL+DML) Home page del corso: difelice/dbsi

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.

Page 13: Basi di Dati e Sistemi Informativi Esercitazione: Il Linguaggio SQL (DDL+DML) Home page del corso: difelice/dbsi

Esercizio 2

Dato il seguente schema:

Atleta(Codice, Nome, Cognome, Societa’)Gara(CodiceGara, Disciplina, Data, CodiceVincitore)Partecipazione(CodiceGara, CodiceAtleta)

SELECT *FROM ATLETAWHERE ((Nome LIKE ‘M%’) OR (Nome IS NULL))

Page 14: Basi di Dati e Sistemi Informativi Esercitazione: Il Linguaggio SQL (DDL+DML) Home page del corso: difelice/dbsi

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”.

Page 15: Basi di Dati e Sistemi Informativi Esercitazione: Il Linguaggio SQL (DDL+DML) Home page del corso: difelice/dbsi

Esercizio 2

Dato il seguente schema:

Atleta(Codice, Nome, Cognome, Societa’)Gara(CodiceGara, Disciplina, Data, CodiceVincitore)Partecipazione(CodiceGara, CodiceAtleta)

SELECT CODICEGARAFROM PARTECIPAZIONE, ATLETAWHERE ((PARTECIPAZIONE.CODICEATLETA=

ATLETA.CODICE) AND (SOCIETA’ = ‘BORGOROSSO’))

Page 16: Basi di Dati e Sistemi Informativi Esercitazione: Il Linguaggio SQL (DDL+DML) Home page del corso: difelice/dbsi

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.

Page 17: Basi di Dati e Sistemi Informativi Esercitazione: Il Linguaggio SQL (DDL+DML) Home page del corso: difelice/dbsi

Esercizio 2

Dato il seguente schema:

Atleta(Codice, Nome, Cognome, Societa’)Gara(CodiceGara, Disciplina, Data, CodiceVincitore)Partecipazione(CodiceGara, CodiceAtleta)

SELECT CODICEGARAFROM PARTECIPAZIONE, ATLETA, GARAWHERE ((CODICEATLETA=CODICE) AND (GARA.CODICEGARA=PARTECIPAZIONE.

CODICEGARA) AND (SOCIETA’ = ‘BORGOROSSO’) AND (DATA=07/10/2013))

Page 18: Basi di Dati e Sistemi Informativi Esercitazione: Il Linguaggio SQL (DDL+DML) Home page del corso: difelice/dbsi

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.

Page 19: Basi di Dati e Sistemi Informativi Esercitazione: Il Linguaggio SQL (DDL+DML) Home page del corso: difelice/dbsi

Esercizio 2

Dato il seguente schema:

Atleta(Codice, Nome, Cognome, Societa’)Gara(CodiceGara, Disciplina, Data, CodiceVincitore)Partecipazione(CodiceGara, CodiceAtleta)

SELECT DISTINCT(SOCIETA’)FROM ATLETA, GARAWHERE ((CODICEVINCITORE=CODICE) AND

(DISCIPLINA=‘LANCIODELDISCO’))

Page 20: Basi di Dati e Sistemi Informativi Esercitazione: Il Linguaggio SQL (DDL+DML) Home page del corso: difelice/dbsi

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.

Page 21: Basi di Dati e Sistemi Informativi Esercitazione: Il Linguaggio SQL (DDL+DML) Home page del corso: difelice/dbsi

Esercizio 2

Dato il seguente schema:

Atleta(Codice, Nome, Cognome, Societa’)Gara(CodiceGara, Disciplina, Data, CodiceVincitore)Partecipazione(CodiceGara, CodiceAtleta)

SELECT COUNT(*)FROM GARAWHERE (DATA=‘7/10/2013’)

Page 22: Basi di Dati e Sistemi Informativi Esercitazione: Il Linguaggio SQL (DDL+DML) Home page del corso: difelice/dbsi

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.

Page 23: Basi di Dati e Sistemi Informativi Esercitazione: Il Linguaggio SQL (DDL+DML) Home page del corso: difelice/dbsi

Esercizio 2

Dato il seguente schema:

Atleta(Codice, Nome, Cognome, Societa’)Gara(CodiceGara, Disciplina, Data, CodiceVincitore)Partecipazione(CodiceGara, CodiceAtleta)

SELECT SOCIETA’, COUNT(*) AS NUMEROFROM ATLETAGROUPBY SOCIETA’

Page 24: Basi di Dati e Sistemi Informativi Esercitazione: Il Linguaggio SQL (DDL+DML) Home page del corso: difelice/dbsi

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.

Page 25: Basi di Dati e Sistemi Informativi Esercitazione: Il Linguaggio SQL (DDL+DML) Home page del corso: difelice/dbsi

Esercizio 2Dato il seguente schema:

Atleta(Codice, Nome, Cognome, Societa’)Gara(CodiceGara, Disciplina, Data, CodiceVincitore)Partecipazione(CodiceGara, CodiceAtleta)

SELECT SOCIETA’ FROM ATLETAGROUPBY SOCIETA’HAVING COUNT(*) >=3

Page 26: Basi di Dati e Sistemi Informativi Esercitazione: Il Linguaggio SQL (DDL+DML) Home page del corso: difelice/dbsi

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.

Page 27: Basi di Dati e Sistemi Informativi Esercitazione: Il Linguaggio SQL (DDL+DML) Home page del corso: difelice/dbsi

Esercizio 2

Dato il seguente schema:

Atleta(Codice, Nome, Cognome, Societa’)Gara(CodiceGara, Disciplina, Data, CodiceVincitore)Partecipazione(CodiceGara, CodiceAtleta)

SELECT CODICEFROM ATLETA, PARTECIPAZIONEWHERE (CODICEATLETA=CODICE)GROUPBY CODICE,CODICEATLETAHAVING (COUNT(*)>=5)

Page 28: Basi di Dati e Sistemi Informativi Esercitazione: Il Linguaggio SQL (DDL+DML) Home page del corso: difelice/dbsi

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.

Page 29: Basi di Dati e Sistemi Informativi Esercitazione: Il Linguaggio SQL (DDL+DML) Home page del corso: difelice/dbsi

Esercizio 2

Dato il seguente schema:

Atleta(Codice, Nome, Cognome, Societa’)Gara(CodiceGara, Disciplina, Data, CodiceVincitore)Partecipazione(CodiceGara, CodiceAtleta)

SELECT CODICEFROM ATLETAEXCEPTSELECT DISTINCT(CODICEATLETA)FROM PARTECIPAZIONE

Page 30: Basi di Dati e Sistemi Informativi Esercitazione: Il Linguaggio SQL (DDL+DML) Home page del corso: difelice/dbsi

Esercizio 3

Dato il seguente schema:

Atleta(Codice, Nome, Cognome, Societa’), 50 elementiGara(CodiceGara, Disciplina, Data, CodiceVincitore)Partecipazione(CodiceGara, CodiceAtleta)

1. Determinare la cardinalita’ (#righe) della query seguente:

SELECT CODICEFROM ATLETA

Page 31: Basi di Dati e Sistemi Informativi Esercitazione: Il Linguaggio SQL (DDL+DML) Home page del corso: difelice/dbsi

Esercizio 3

Dato il seguente schema:

Atleta(Codice, Nome, Cognome, Societa’), 50 elementiGara(CodiceGara, Disciplina, Data, CodiceVincitore)Partecipazione(CodiceGara, CodiceAtleta)

1. Determinare la cardinalita’ (#righe) della query seguente:

SELECT CODICEFROM ATLETA

Cardinalita’ del risultato: 50

Page 32: Basi di Dati e Sistemi Informativi Esercitazione: Il Linguaggio SQL (DDL+DML) Home page del corso: difelice/dbsi

Esercizio 3

Dato il seguente schema:

Atleta(Codice, Nome, Cognome, Societa’), 50 elementiGara(CodiceGara, Disciplina, Data, CodiceVincitore)Partecipazione(CodiceGara, CodiceAtleta)

2. Determinare la cardinalita’ (#righe) della query seguente:

SELECT DISTINCT(NOME)FROM ATLETA

Page 33: Basi di Dati e Sistemi Informativi Esercitazione: Il Linguaggio SQL (DDL+DML) Home page del corso: difelice/dbsi

Esercizio 3

Dato il seguente schema:

Atleta(Codice, Nome, Cognome, Societa’), 50 elementiGara(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

Page 34: Basi di Dati e Sistemi Informativi Esercitazione: Il Linguaggio SQL (DDL+DML) Home page del corso: difelice/dbsi

Esercizio 3

Dato il seguente schema:

Atleta(Codice, Nome, Cognome, Societa’), 50 elementiGara(CodiceGara, Disciplina, Data, CodiceVincitore)Partecipazione(CodiceGara, CodiceAtleta)

3. Determinare la cardinalita’ (#righe) della query seguente:

SELECT DISTINCT(NOME)FROM ATLETAWHERE (SOCIETA’ =‘Borgorosso’)

Page 35: Basi di Dati e Sistemi Informativi Esercitazione: Il Linguaggio SQL (DDL+DML) Home page del corso: difelice/dbsi

Esercizio 3

Dato il seguente schema:

Atleta(Codice, Nome, Cognome, Societa’), 50 elementiGara(CodiceGara, Disciplina, Data, CodiceVincitore)Partecipazione(CodiceGara, CodiceAtleta)

3. Determinare la cardinalita’ (#righe) della query seguente:

SELECT DISTINCT(NOME)FROM ATLETAWHERE (SOCIETA’ =‘Borgorosso’)

Cardinalita’ del risultato: 1<=x<=50

Page 36: Basi di Dati e Sistemi Informativi Esercitazione: Il Linguaggio SQL (DDL+DML) Home page del corso: difelice/dbsi

Esercizio 3

Dato il seguente schema:

Atleta(Codice, Nome, Cognome, Societa’), 50 elementiGara(CodiceGara, Disciplina, Data, CodiceVincitore), 20 elPartecipazione(CodiceGara, CodiceAtleta), 100 elementi

4. Determinare la cardinalita’ (#righe) della query seguente:

SELECT CODICEGARAFROM PARTECIPAZIONE, ATLETAWHERE (CODICE=CODICEATLETA)

Page 37: Basi di Dati e Sistemi Informativi Esercitazione: Il Linguaggio SQL (DDL+DML) Home page del corso: difelice/dbsi

Esercizio 3

Dato il seguente schema:

Atleta(Codice, Nome, Cognome, Societa’), 50 elementiGara(CodiceGara, Disciplina, Data, CodiceVincitore), 20 elPartecipazione(CodiceGara, CodiceAtleta), 100 elementi

4. Determinare la cardinalita’ (#righe) della query seguente:

SELECT CODICEGARAFROM PARTECIPAZIONE, ATLETAWHERE (CODICE=CODICEATLETA)

Cardinalita’ del risultato: 100

Page 38: Basi di Dati e Sistemi Informativi Esercitazione: Il Linguaggio SQL (DDL+DML) Home page del corso: difelice/dbsi

Esercizio 3

Dato il seguente schema:

Atleta(Codice, Nome, Cognome, Specialita’), 50 elementiGara(CodiceGara, Disciplina, Data, CodiceVincitore), 20 elPartecipazione(CodiceGara, CodiceAtleta), 100 elementi

5. Determinare la cardinalita’ (#righe) della query seguente:

SELECT *FROM GARA, ATLETAWHERE (DISCIPLINA=SPECIALITA’)

Cardinalita’ del risultato: 0<=x<=50*20

Page 39: Basi di Dati e Sistemi Informativi Esercitazione: Il Linguaggio SQL (DDL+DML) Home page del corso: difelice/dbsi

Esercizio 4

Dato il seguente schema:

Atleta(Codice, Nome, Cognome, Specialita’), 50 elementiGara(CodiceGara, Disciplina, Data, CodiceVincitore), 20 elPartecipazione(CodiceGara, CodiceAtleta), 100 elementi

1. Determinare se la query seguente e’ corretta o meno.

SELECT COUNT(*) FROM ATLETA, PARTECIPAZIONEWHERE (CODICEATLETA=CODICE)

Page 40: Basi di Dati e Sistemi Informativi Esercitazione: Il Linguaggio SQL (DDL+DML) Home page del corso: difelice/dbsi

Esercizio 4

Dato il seguente schema:

Atleta(Codice, Nome, Cognome, Specialita’), 50 elementiGara(CodiceGara, Disciplina, Data, CodiceVincitore), 20 elPartecipazione(CodiceGara, CodiceAtleta), 100 elementi

1. Determinare se la query seguente e’ corretta o meno.

SELECT COUNT(*) FROM ATLETA, PARTECIPAZIONEWHERE (CODICEATLETA=CODICE)

CORRETTA!

Page 41: Basi di Dati e Sistemi Informativi Esercitazione: Il Linguaggio SQL (DDL+DML) Home page del corso: difelice/dbsi

Esercizio 4

Dato il seguente schema:

Atleta(Codice, Nome, Cognome, Specialita’), 50 elementiGara(CodiceGara, Disciplina, Data, CodiceVincitore), 20 elPartecipazione(CodiceGara, CodiceAtleta), 100 elementi

2. Determinare se la query seguente e’ corretta o meno.

SELECT CODICE, COUNT(*) FROM ATLETA, PARTECIPAZIONEWHERE (CODICEATLETA=CODICE)

Page 42: Basi di Dati e Sistemi Informativi Esercitazione: Il Linguaggio SQL (DDL+DML) Home page del corso: difelice/dbsi

Esercizio 4

Dato il seguente schema:

Atleta(Codice, Nome, Cognome, Specialita’), 50 elementiGara(CodiceGara, Disciplina, Data, CodiceVincitore), 20 elPartecipazione(CodiceGara, CodiceAtleta), 100 elementi

2. Determinare se la query seguente e’ corretta o meno.

SELECT CODICE, COUNT(*) FROM ATLETA, PARTECIPAZIONEWHERE (CODICEATLETA=CODICE)

ERRATA!

Page 43: Basi di Dati e Sistemi Informativi Esercitazione: Il Linguaggio SQL (DDL+DML) Home page del corso: difelice/dbsi

Esercizio 4

Dato il seguente schema:

Atleta(Codice, Nome, Cognome, Specialita’), 50 elementiGara(CodiceGara, Disciplina, Data, CodiceVincitore), 20 elPartecipazione(CodiceGara, CodiceAtleta), 100 elementi

3. Determinare se la query seguente e’ corretta o meno.

SELECT CODICE, COUNT(*) FROM ATLETA, PARTECIPAZIONEWHERE (CODICEATLETA=CODICE)GROUPBY CODICE

Page 44: Basi di Dati e Sistemi Informativi Esercitazione: Il Linguaggio SQL (DDL+DML) Home page del corso: difelice/dbsi

Esercizio 4

Dato il seguente schema:

Atleta(Codice, Nome, Cognome, Specialita’), 50 elementiGara(CodiceGara, Disciplina, Data, CodiceVincitore), 20 elPartecipazione(CodiceGara, CodiceAtleta), 100 elementi

3. Determinare se la query seguente e’ corretta o meno.

SELECT CODICE, COUNT(*) FROM ATLETA, PARTECIPAZIONEWHERE (CODICEATLETA=CODICE)GROUPBY CODICE

CORRETTA!

Page 45: Basi di Dati e Sistemi Informativi Esercitazione: Il Linguaggio SQL (DDL+DML) Home page del corso: difelice/dbsi

Esercizio 4

Dato il seguente schema:

Atleta(Codice, Nome, Cognome, Specialita’), 50 elementiGara(CodiceGara, Disciplina, Data, CodiceVincitore), 20 elPartecipazione(CodiceGara, CodiceAtleta), 100 elementi

4. Determinare se la query seguente e’ corretta o meno.

SELECT NOME, COUNT(*) FROM ATLETA, PARTECIPAZIONEWHERE (CODICEATLETA=CODICE)GROUPBY CODICE

Page 46: Basi di Dati e Sistemi Informativi Esercitazione: Il Linguaggio SQL (DDL+DML) Home page del corso: difelice/dbsi

Esercizio 4

Dato il seguente schema:

Atleta(Codice, Nome, Cognome, Specialita’), 50 elementiGara(CodiceGara, Disciplina, Data, CodiceVincitore), 20 elPartecipazione(CodiceGara, CodiceAtleta), 100 elementi

4. Determinare se la query seguente e’ corretta o meno.

SELECT NOME, COUNT(*) FROM ATLETA, PARTECIPAZIONEWHERE (CODICEATLETA=CODICE)GROUPBY CODICE

ERRATA!

Page 47: Basi di Dati e Sistemi Informativi Esercitazione: Il Linguaggio SQL (DDL+DML) Home page del corso: difelice/dbsi

Esercizio 4

Dato il seguente schema:

Atleta(Codice, Nome, Cognome, Specialita’), 50 elementiGara(CodiceGara, Disciplina, Data, CodiceVincitore), 20 elPartecipazione(CodiceGara, CodiceAtleta), 100 elementi

5. Determinare se la query seguente e’ corretta o meno.

SELECT NOME FROM ATLETA, PARTECIPAZIONEWHERE (CODICEATLETA=CODICE)GROUPBY CODICEHAVING (SPECIALITA’ ==‘ATLETICA’)

Page 48: Basi di Dati e Sistemi Informativi Esercitazione: Il Linguaggio SQL (DDL+DML) Home page del corso: difelice/dbsi

Esercizio 4

Dato il seguente schema:

Atleta(Codice, Nome, Cognome, Specialita’), 50 elementiGara(CodiceGara, Disciplina, Data, CodiceVincitore), 20 elPartecipazione(CodiceGara, CodiceAtleta), 100 elementi

5. Determinare se la query seguente e’ corretta o meno.

SELECT NOME FROM ATLETA, PARTECIPAZIONEWHERE (CODICEATLETA=CODICE)GROUPBY CODICEHAVING (SPECIALITA’ ==‘ATLETICA’)

ERRATA!

Page 49: Basi di Dati e Sistemi Informativi Esercitazione: Il Linguaggio SQL (DDL+DML) Home page del corso: difelice/dbsi

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”.

Page 50: Basi di Dati e Sistemi Informativi Esercitazione: Il Linguaggio SQL (DDL+DML) Home page del corso: difelice/dbsi

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’)

Page 51: Basi di Dati e Sistemi Informativi Esercitazione: Il Linguaggio SQL (DDL+DML) Home page del corso: difelice/dbsi

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.

Page 52: Basi di Dati e Sistemi Informativi Esercitazione: Il Linguaggio SQL (DDL+DML) Home page del corso: difelice/dbsi

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 ATLETIUNIONSELECT NOME,COGNOME,SOCIETA’FROM ALLENATORI)

Page 53: Basi di Dati e Sistemi Informativi Esercitazione: Il Linguaggio SQL (DDL+DML) Home page del corso: difelice/dbsi

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.

Page 54: Basi di Dati e Sistemi Informativi Esercitazione: Il Linguaggio SQL (DDL+DML) Home page del corso: difelice/dbsi

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 ALLENATORIWHERE (SOCIETA’ IS NULL)

Page 55: Basi di Dati e Sistemi Informativi Esercitazione: Il Linguaggio SQL (DDL+DML) Home page del corso: difelice/dbsi

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”

Page 56: Basi di Dati e Sistemi Informativi Esercitazione: Il Linguaggio SQL (DDL+DML) Home page del corso: difelice/dbsi

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 ATLETISET SOCIETA’=‘POLISPORTIVA ROSSI’WHERE DATANASCITA=’10/11/2012’

Page 57: Basi di Dati e Sistemi Informativi Esercitazione: Il Linguaggio SQL (DDL+DML) Home page del corso: difelice/dbsi

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.

Page 58: Basi di Dati e Sistemi Informativi Esercitazione: Il Linguaggio SQL (DDL+DML) Home page del corso: difelice/dbsi

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

Page 59: Basi di Dati e Sistemi Informativi Esercitazione: Il Linguaggio SQL (DDL+DML) Home page del corso: difelice/dbsi

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).

Page 60: Basi di Dati e Sistemi Informativi Esercitazione: Il Linguaggio SQL (DDL+DML) Home page del corso: difelice/dbsi

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).

Page 61: Basi di Dati e Sistemi Informativi Esercitazione: Il Linguaggio SQL (DDL+DML) Home page del corso: difelice/dbsi

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.

Page 62: Basi di Dati e Sistemi Informativi Esercitazione: Il Linguaggio SQL (DDL+DML) Home page del corso: difelice/dbsi

Esercizio 7

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 DWHERE I.DIRETTORE IN WHERE (I.DIRETTORE =

SELECT DIRETTORE D.DIRETTORE)FROM DIPARTIMENTO

Definire se le due query sono equivalenti.

Page 63: Basi di Dati e Sistemi Informativi Esercitazione: Il Linguaggio SQL (DDL+DML) Home page del corso: difelice/dbsi

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 MATRICOLAFROM IMPIEGATO WHERE (STIPENDIO SELECT STIPENDIO

FROM IMPIEGATO)

Indicare una condizione valida!

Page 64: Basi di Dati e Sistemi Informativi Esercitazione: Il Linguaggio SQL (DDL+DML) Home page del corso: difelice/dbsi

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 MATRICOLAFROM IMPIEGATO WHERE (STIPENDIO SELECT STIPENDIO

FROM IMPIEGATO)

Indicare una condizione valida!

Page 65: Basi di Dati e Sistemi Informativi Esercitazione: Il Linguaggio SQL (DDL+DML) Home page del corso: difelice/dbsi

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 MATRICOLAFROM IMPIEGATO WHERE (MATRICOLA SELECT MATRICOLA

FROM IMPIEGATOWHERE (STIPENDIO IN (20000,30000))

Indicare una condizione valida!

Page 66: Basi di Dati e Sistemi Informativi Esercitazione: Il Linguaggio SQL (DDL+DML) Home page del corso: difelice/dbsi

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).

Page 67: Basi di Dati e Sistemi Informativi Esercitazione: Il Linguaggio SQL (DDL+DML) Home page del corso: difelice/dbsi

Esercizio 9

SELECT DISTINCT(NOME)FROM CLIENTIWHERE NRPATENTE = ANY

(SELECT PATENTECLIENTE FROM NOLEGGIO

WHERE (Data = “15/01/2013”) ))

Dato il seguente schema:

VEICOLO(Targa, Modello, AnnoImmatricolazione)CLIENTI(NrPatente, Nome, Cognome, DataNascita)NOLEGGIO(TargaVeicolo, Data, PatenteCliente)

Page 68: Basi di Dati e Sistemi Informativi Esercitazione: Il Linguaggio SQL (DDL+DML) Home page del corso: difelice/dbsi

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).

Page 69: Basi di Dati e Sistemi Informativi Esercitazione: Il Linguaggio SQL (DDL+DML) Home page del corso: difelice/dbsi

Esercizio 9

Dato il seguente schema:

VEICOLO(Targa, Modello, AnnoImmatricolazione)CLIENTI(NrPatente, Nome, Cognome, DataNascita)NOLEGGIO(TargaVeicolo, Data, PatenteCliente)

SELECT DISTINCT(Nome)FROM CLIENTI CWHERE NOT EXIST (

SELECT *FROM NOLEGGIO NWHER (C.NRPATENTE=N.PATENTECLIENTE))

Page 70: Basi di Dati e Sistemi Informativi Esercitazione: Il Linguaggio SQL (DDL+DML) Home page del corso: difelice/dbsi

Esercizio 9

Dato il seguente schema:

VEICOLO(Targa, Modello, AnnoImmatricolazione)CLIENTI(NrPatente, Nome, Cognome, DataNascita)NOLEGGIO(TargaVeicolo, Data, PatenteCliente)

SELECT DISTINCT(Nome)FROM CLIENTI CWHERE NRPATENTE NOT IN

SELECT PATENTECLIENTEFROM NOLEGGIO N

Page 71: Basi di Dati e Sistemi Informativi Esercitazione: Il Linguaggio SQL (DDL+DML) Home page del corso: difelice/dbsi

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).

Page 72: Basi di Dati e Sistemi Informativi Esercitazione: Il Linguaggio SQL (DDL+DML) Home page del corso: difelice/dbsi

Esercizio 9

CREATE VIEW TOTNOLEGGI(P, NUM) AS (SELECT PATENTECLIENTE AS P, COUNT (*) AS

NUMFROM NOLEGGIOGROUPBY PATENTECLIENTE

)

SELECT NOME, COGNOMEFROM TOTNOLEGGI, CLIENTIWHERE ((NUM > SELECT AVG(NUM)

FROM TOTNOLEGGI) AND (P=NRPATENTE))

Page 73: Basi di Dati e Sistemi Informativi Esercitazione: Il Linguaggio SQL (DDL+DML) Home page del corso: difelice/dbsi

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.

Page 74: Basi di Dati e Sistemi Informativi Esercitazione: Il Linguaggio SQL (DDL+DML) Home page del corso: difelice/dbsi

Esercizio 10

Dato il seguente schema:

PROFESSORE(Codice, Nome, Cognome, Dipartimento, Qualifica, Stipendio)

CREATE ASSERTION VINCOLO1 CHECK(30 <= ALL (SELECT COUNT(*)

FROM PROFESSOREGROUPBY DIPARTIMENTO))

Page 75: Basi di Dati e Sistemi Informativi Esercitazione: Il Linguaggio SQL (DDL+DML) Home page del corso: difelice/dbsi

Esercizio 10

Dato il seguente schema:

PROFESSORE(Codice, Nome, Cognome, Dipartimento, Qualifica, Stipendio)

CREATE ASSERTION VINCOLO2 CHECK(25000 <= ALL (SELECT AVG(STIPENDIO)

FROM PROFESSOREGROUPBY DIPARTIMENTO))

Page 76: Basi di Dati e Sistemi Informativi Esercitazione: Il Linguaggio SQL (DDL+DML) Home page del corso: difelice/dbsi

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.

Page 77: Basi di Dati e Sistemi Informativi Esercitazione: Il Linguaggio SQL (DDL+DML) Home page del corso: difelice/dbsi

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.

Page 78: Basi di Dati e Sistemi Informativi Esercitazione: Il Linguaggio SQL (DDL+DML) Home page del corso: difelice/dbsi

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.