La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

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

Presentazioni simili


Presentazione sul tema: "Basi di Dati e Sistemi Informativi Esercitazione: Il Linguaggio SQL (DDL+DML) Home page del corso:"— Transcript della presentazione:

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

2 Esercizio 1  Scrivere il codice SQL dello schema CodiceAutoreConferenzaAnnoFormatoPagine ARTICOLI  Autore deve essere sempre definito.  Conferenza è una stringa di lunghezza max 8.  Formato è una stringa di lunghezza 3.  Il numero di pagine deve essere sempre maggiore di 0, nel caso di omissione si assume pari ad 1.

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

4 Esercizio 1  Scrivere il codice SQL dello schema NomeDataOrganizzatoreNumPartecipanti CONFERENZE  Vincolo di integrita’: ARTICOLO.{Conferenza, Data}  CONFERENZA.{Nome, Data}  Rimuovendo una conferenza da CONFERENZE, vengono rimossi anche gli articoli corrispondenti

5 Esercizio 1 CREATE TABLE CONFERENZE ( NOME VARCHAR(8), DATA DATE, ORGANIZZATORE VARCHAR(20), NUMPARTECIPANTI INTEGER CHECK (NUMPARTECIPANTI>0), PRIMARY KEY(NOME,DATA) );

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

7 Esercizio 1  Scrivere il codice SQL dello schema NomeConfDataConfNomeCognomeRuolo PARTECIPANTE  Vincolo di integrita’: PARTECIPANTE.{NomeConf, DataConf}  CONFERENZA.{Nome, Data}  Ogni aggiornamento di {Nome, Data} nella relazione CONFERENZA viene propagato anche alla relazione PARTECIPANTE.

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

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

10 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) CREATE DOMAIN NOMEUTENTE AS VARCHAR(10) DEFAULT USER

11 Esercizio 3 (per casa)   Scrivere il codice SQL dello schema seguente: NomeCognomeDataNascitaPresenzaGoalNSquadra GIOCATORI  Presenza è un intero, valore di default 0.  Goal è un intero, valore di default 0, e può assumere valori compresi tra 0 e 30.  Esiste un vincolo di integrità tra GIOCATORI.Nsquadra e SQUADRE.Nome

12 Esercizio 3 (per casa)   Scrivere il codice SQL dello schema NomeCampionat o Data FondazioneCittà SQUADRE  Nome è una stringa di lunghezza massima 20 caratteri.  Campionato è un carattere, e può assumere solo i valori {A,B,C}.  Città deve essere sempre definito

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

29 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

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

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

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

33 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

34 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

35 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

36 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

37 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

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

39 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

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

41 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

42 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

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

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

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

46 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!)

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

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

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

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

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

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

53 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

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

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

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

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

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

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

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

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

62 Esercizio 8 Dato il seguente schema: IMPIEGATO(Matricola, Nome, Cognome, Stipendio, Direttore) DIPARTIMENTO(Codice, Direttore) SELECT SUM(STIPENDIO) FROM IMPIEGATO I FROM IMPIEGATO I, DIPARTIMENTO D WHERE I.DIRETTORE IN WHERE (I.DIRETTORE = SELECT DIRETTORE D.DIRETTORE) FROM DIPARTIMENTO Definire se le due query sono equivalenti.

63 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 SELECT STIPENDIO FROM IMPIEGATO) Indicare una condizione valida!

64 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 SELECT STIPENDIO FROM IMPIEGATO) Indicare una condizione valida!

65 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 SELECT MATRICOLA FROM IMPIEGATO WHERE (STIPENDIO IN (20000,30000)) Indicare una condizione valida!

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

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

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

69 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

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

71 Esercizio 10.a Date le seguenti transazioni: T 0 : r 0 (x) r 0 (y) r 0 (z) w 0 (z) C(T 0 ) T 1 : w 1 (y) w 1 (z) r 1 (a) r 1 (b) w 1 (a) A(T 1 ) T 2 : r 2 (a) r 2 (b) w 2 (b) w 2 (a) C(T 2 ) Lo schedule seguente e’ uno schedule seriale:  w 1 (y) w 1 (z) r 1 (a) r 1 (b) w 1 (a) A(T 1 ) r 2 (a) r 2 (b) w 2 (b) w 2 (a) C(T 2 ) r 0 (x) r 0 (y) r 0 (z) w 0 (z) C(T 0 )

72 Esercizio 10.b Date le seguenti transazioni: T 0 : r 0 (x) r 0 (y) r 0 (z) w 0 (z) C(T 0 ) T 1 : w 1 (y) w 1 (z) r 1 (a) r 1 (b) w 1 (a) A(T 1 ) T 2 : r 2 (a) r 2 (b) w 2 (b) w 2 (a) C(T 2 ) Il seguente schedule e’ uno schedule seriale:  w 1 (y) w 1 (z) r 1 (a) r 2 (a) r 2 (b) w 2 (b) w 2 (a) C(T 2 ) r 0 (x) r 0 (y) r 0 (z) w 0 (z) C(T 0 ) r 1 (b) w 1 (a) A(T 1 )

73 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. r 4 (x), r 6 (x), r 17 (x), w 16 (x), w 18 (x), w 23 (x), w 29 (x), r 20 (x), r 30 (x), r 25 (x)

74 Esercizio 12 Indicare gli insiemi di UNDO/REDO e le operazioni di recovery, se vengono eseguite le seguenti operazioni sul DB: DUMP B(T 1 ) B(T 2 ) B(T 3 ) I(T 1,O 1,A 1 ) D(T 2,O 2,B 2 ) B(T 4 ) U(T 4,O 3,B 3,A 3 ) U(T 1,O 4,B 4,A 4 ) C(T 2 ) CK(T 1,T 3,T 4 ) B(T 5 ) B(T 6 ) U(T 5,O 5,B 5,A 5 ) A(T 3 ) CK(T 1,T 4,T 5,T 6 ) B(T 7 ) C(T 4 ) U(T 7,O 6,B 6,A 6 ) U(T 6,O 3,B 7,A 7 ) B(T 8 ) A(T 7 ) guasto

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

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

77 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

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

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


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

Presentazioni simili


Annunci Google