780 likes | 935 Views
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. Autore deve essere sempre definito .
E N D
Basi di Dati e SistemiInformativi Esercitazione: Il Linguaggio SQL (DDL+DML) Home page del corso: http://www.cs.unibo.it/~difelice/dbsi/
Esercizio1 • Scrivereilcodice SQL dello schema ARTICOLI • Autoredeveesseresempredefinito. • Conferenza e’ unastringa di lunghezza max 8. • Formato e’ unastringa di lunghezza 3. • Il numero di paginedeveesseresempremaggiore di 0, nelcaso di omissionesiassume 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) );
Esercizio1 • Scrivereilcodice SQL dello schema CONFERENZE • Vincolo di integrita’: ARTICOLO.{Conferenza, Data} CONFERENZA.{Nome, Data} • Rimuovendounaconferenza da CONFERENZE, vengonorimossianchegliarticolicorrispondenti
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 );
Esercizio1 • Scrivereilcodice SQL dello schema PARTECIPANTE • Vincolo di integrita’: PARTECIPANTE.{NomeConf, DataConf} CONFERENZA.{Nome, Data} • Ogni aggiornamento di {Nome, Data} nellarelazione CONFERENZA vienepropagatoancheallarelazione 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 Datoilseguente schema: Atleta(Codice, Nome, Cognome, Societa’) Gara(CodiceGara, Disciplina, Data, CodiceVincitore) Partecipazione(CodiceGara, CodiceAtleta) Scrivere la query SQLchedetermina: 0.Nomi e cognomi di Atletidellasocieta’ Borgorosso.
Esercizio 2 Datoilseguente schema: Atleta(Codice, Nome, Cognome, Societa’) Gara(CodiceGara, Disciplina, Data, CodiceVincitore) Partecipazione(CodiceGara, CodiceAtleta) Scrivere la query SQLchedetermina: SELECT NOME, COGNOME FROM ATLETA WHERE (SOCIETA’=‘Borgorosso’)
Esercizio 2 Datoilseguente schema: Atleta(Codice, Nome, Cognome, Societa’) Gara(CodiceGara, Disciplina, Data, CodiceVincitore) Partecipazione(CodiceGara, CodiceAtleta) Scrivere la query SQLchedetermina: 1. Le righedellatabella ATLETA chesiriferiscono ad atletiil cui nomeinizia per “M” oppure non e’ specificato.
Esercizio 2 Datoilseguente schema: Atleta(Codice, Nome, Cognome, Societa’) Gara(CodiceGara, Disciplina, Data, CodiceVincitore) Partecipazione(CodiceGara, CodiceAtleta) Scrivere la query SQLchedetermina: 1. Le righedellatabella ATLETA chesiriferiscono ad atletiil cui nomeinizia per “M” oppure non e’ specificato.
Esercizio 2 Datoilseguente 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 Datoilseguente schema: Atleta(Codice, Nome, Cognome, Societa’) Gara(CodiceGara, Disciplina, Data, CodiceVincitore) Partecipazione(CodiceGara, CodiceAtleta) Scrivere la query SQLchedetermina: 2. Tuttiicodicidellegare di Atletica cui partecipanoatletidellasocieta’ “Borgorosso”.
Esercizio 2 Datoilseguente 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 Datoilseguente schema: Atleta(Codice, Nome, Cognome, Societa’) Gara(CodiceGara, Disciplina, Data, CodiceVincitore) Partecipazione(CodiceGara, CodiceAtleta) Scrivere la query SQLchedetermina: 3. Tuttiicodicidellegare di Atletica cui partecipanoatletidellasocieta’ “Borgorosso”, svolte in data 7/10/2013.
Esercizio 2 Datoilseguente 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 Datoilseguente schema: Atleta(Codice, Nome, Cognome, Societa’) Gara(CodiceGara, Disciplina, Data, CodiceVincitore) Partecipazione(CodiceGara, CodiceAtleta) Scrivere la query SQLchedetermina: 4. I nomidellesocieta’ i cui atletihannovintounagara di LancioDelDisco. Filtrareiduplicati.
Esercizio 2 Datoilseguente 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 Datoilseguente schema: Atleta(Codice, Nome, Cognome, Societa’) Gara(CodiceGara, Disciplina, Data, CodiceVincitore) Partecipazione(CodiceGara, CodiceAtleta) Scrivere la query SQLchedetermina: 5. Il numero di garesvolte in data 7/10/2013.
Esercizio 2 Datoilseguente 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 Datoilseguente schema: Atleta(Codice, Nome, Cognome, Societa’) Gara(CodiceGara, Disciplina, Data, CodiceVincitore) Partecipazione(CodiceGara, CodiceAtleta) Scrivere la query SQLchedetermina: 6. Per ognisocieta’, ilnumero di atletiche ne fanno parte.
Esercizio 2 Datoilseguente 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 Datoilseguente schema: Atleta(Codice, Nome, Cognome, Societa’) Gara(CodiceGara, Disciplina, Data, CodiceVincitore) Partecipazione(CodiceGara, CodiceAtleta) Scrivere la query SQLchedetermina: 7. Le societa’ chehannoalmeno 3 atletitesserati.
Esercizio 2 Datoilseguente 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 Datoilseguente schema: Atleta(Codice, Nome, Cognome, Societa’) Gara(CodiceGara, Disciplina, Data, CodiceVincitore) Partecipazione(CodiceGara, CodiceAtleta) Scrivere la query SQLchedetermina: 7. Gliatletichehannopartecipato ad almeno 5 gare.
Esercizio 2 Datoilseguente 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 Datoilseguente schema: Atleta(Codice, Nome, Cognome, Societa’) Gara(CodiceGara, Disciplina, Data, CodiceVincitore) Partecipazione(CodiceGara, CodiceAtleta) Scrivere la query SQLchedetermina: 8. Gliatletiche NON hannomaipartecipato ad unagara.
Esercizio 2 Datoilseguente 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 Datoilseguente 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 Datoilseguente 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 Datoilseguente 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 Datoilseguente 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 Datoilseguente 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 Datoilseguente 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 Datoilseguente schema: Atleta(Codice, Nome, Cognome, Societa’), 50 elementi Gara(CodiceGara, Disciplina, Data, CodiceVincitore), 20 el Partecipazione(CodiceGara, CodiceAtleta), 100elementi 4.Determinare la cardinalita’ (#righe) della query seguente: SELECT CODICEGARA FROM PARTECIPAZIONE, ATLETA WHERE (CODICE=CODICEATLETA)
Esercizio 3 Datoilseguente schema: Atleta(Codice, Nome, Cognome, Societa’), 50 elementi Gara(CodiceGara, Disciplina, Data, CodiceVincitore), 20 el Partecipazione(CodiceGara, CodiceAtleta), 100elementi 4.Determinare la cardinalita’ (#righe) della query seguente: SELECT CODICEGARA FROM PARTECIPAZIONE, ATLETA WHERE (CODICE=CODICEATLETA) Cardinalita’ del risultato: 100
Esercizio 3 Datoilseguente schema: Atleta(Codice, Nome, Cognome, Specialita’), 50 elementi Gara(CodiceGara, Disciplina, Data, CodiceVincitore), 20 el Partecipazione(CodiceGara, CodiceAtleta), 100elementi 5.Determinare la cardinalita’ (#righe) della query seguente: SELECT * FROM GARA, ATLETA WHERE (DISCIPLINA=SPECIALITA’) Cardinalita’ del risultato: 0<=x<=50*20
Esercizio4 Datoilseguente schema: Atleta(Codice, Nome, Cognome, Specialita’), 50 elementi Gara(CodiceGara, Disciplina, Data, CodiceVincitore), 20 el Partecipazione(CodiceGara, CodiceAtleta), 100elementi 1.Determinare se la query seguente e’ corretta o meno. SELECT COUNT(*) FROM ATLETA, PARTECIPAZIONE WHERE (CODICEATLETA=CODICE)
Esercizio4 Datoilseguente schema: Atleta(Codice, Nome, Cognome, Specialita’), 50 elementi Gara(CodiceGara, Disciplina, Data, CodiceVincitore), 20 el Partecipazione(CodiceGara, CodiceAtleta), 100elementi 1.Determinare se la query seguente e’ corretta o meno. SELECT COUNT(*) FROM ATLETA, PARTECIPAZIONE WHERE (CODICEATLETA=CODICE) CORRETTA!
Esercizio4 Datoilseguente schema: Atleta(Codice, Nome, Cognome, Specialita’), 50 elementi Gara(CodiceGara, Disciplina, Data, CodiceVincitore), 20 el Partecipazione(CodiceGara, CodiceAtleta), 100elementi 2.Determinare se la query seguente e’ corretta o meno. SELECT CODICE, COUNT(*) FROM ATLETA, PARTECIPAZIONE WHERE (CODICEATLETA=CODICE)
Esercizio4 Datoilseguente schema: Atleta(Codice, Nome, Cognome, Specialita’), 50 elementi Gara(CodiceGara, Disciplina, Data, CodiceVincitore), 20 el Partecipazione(CodiceGara, CodiceAtleta), 100elementi 2.Determinare se la query seguente e’ corretta o meno. SELECT CODICE, COUNT(*) FROM ATLETA, PARTECIPAZIONE WHERE (CODICEATLETA=CODICE) ERRATA!
Esercizio4 Datoilseguente schema: Atleta(Codice, Nome, Cognome, Specialita’), 50 elementi Gara(CodiceGara, Disciplina, Data, CodiceVincitore), 20 el Partecipazione(CodiceGara, CodiceAtleta), 100elementi 3.Determinare se la query seguente e’ corretta o meno. SELECT CODICE, COUNT(*) FROM ATLETA, PARTECIPAZIONE WHERE (CODICEATLETA=CODICE) GROUPBY CODICE
Esercizio4 Datoilseguente schema: Atleta(Codice, Nome, Cognome, Specialita’), 50 elementi Gara(CodiceGara, Disciplina, Data, CodiceVincitore), 20 el Partecipazione(CodiceGara, CodiceAtleta), 100elementi 3.Determinare se la query seguente e’ corretta o meno. SELECT CODICE, COUNT(*) FROM ATLETA, PARTECIPAZIONE WHERE (CODICEATLETA=CODICE) GROUPBY CODICE CORRETTA!
Esercizio4 Datoilseguente schema: Atleta(Codice, Nome, Cognome, Specialita’), 50 elementi Gara(CodiceGara, Disciplina, Data, CodiceVincitore), 20 el Partecipazione(CodiceGara, CodiceAtleta), 100elementi 4.Determinare se la query seguente e’ corretta o meno. SELECT NOME, COUNT(*) FROM ATLETA, PARTECIPAZIONE WHERE (CODICEATLETA=CODICE) GROUPBY CODICE
Esercizio4 Datoilseguente schema: Atleta(Codice, Nome, Cognome, Specialita’), 50 elementi Gara(CodiceGara, Disciplina, Data, CodiceVincitore), 20 el Partecipazione(CodiceGara, CodiceAtleta), 100elementi 4.Determinare se la query seguente e’ corretta o meno. SELECT NOME, COUNT(*) FROM ATLETA, PARTECIPAZIONE WHERE (CODICEATLETA=CODICE) GROUPBY CODICE ERRATA!
Esercizio4 Datoilseguente schema: Atleta(Codice, Nome, Cognome, Specialita’), 50 elementi Gara(CodiceGara, Disciplina, Data, CodiceVincitore), 20 el Partecipazione(CodiceGara, CodiceAtleta), 100elementi 5.Determinare se la query seguente e’ corretta o meno. SELECT NOME FROM ATLETA, PARTECIPAZIONE WHERE (CODICEATLETA=CODICE) GROUPBY CODICE HAVING (SPECIALITA’ ==‘ATLETICA’)
Esercizio4 Datoilseguente schema: Atleta(Codice, Nome, Cognome, Specialita’), 50 elementi Gara(CodiceGara, Disciplina, Data, CodiceVincitore), 20 el Partecipazione(CodiceGara, CodiceAtleta), 100elementi 5.Determinare se la query seguente e’ corretta o meno. SELECT NOME FROM ATLETA, PARTECIPAZIONE WHERE (CODICEATLETA=CODICE) GROUPBY CODICE HAVING (SPECIALITA’ ==‘ATLETICA’) ERRATA!
Esercizio 5 Datoilseguente schema: Atleta(Codice, Nome, Cognome, DataNascita, Societa’) Allenatore(Codice, Nome, Cognome, Profilo, Societa’) Sportivi(Nome, Cognome, Societa’) Scrivere la query SQLche: 1. Inseriscenellatabellasportivil’utente “Michele Rossi”.
Esercizio 5 Datoilseguente 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’)