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

Slides:



Advertisements
Presentazioni simili
Interrogazioni Semplici Le operazioni di interrogazione vengono specificate per mezzo dellistruzione select select ListaAttributi from ListaTabelle [where.
Advertisements

TIPI STANDARD DI SQL BOOLEAN Valori: vero, falso CHAR(n)
SQL applicato a SQL Server
© 2007 SEI-Società Editrice Internazionale, Apogeo Unità C1 Il linguaggio SQL.
Structured Query Language (SQL) Presentazione 13.1 Informatica Generale (Prof. Luca A. Ludovico)
Sistemi per il recupero delle informazioni
Biglietti: schema E/R.
Esercitazioni del Corso di Sistemi Informativi Marina Mongiello
1 SQL come linguaggio di definizione di dati Eugenio Di Sciascio.
Esercitazioni del Corso di Sistemi Informativi Marina Mongiello
Basi di Dati prof. A. Longheu
Progettazione ER Un database universitario contiene informazioni riguardanti i professori (identificati dal codice fiscale) e informazioni relative ai.
SQL.
SQL Structured Query Language
19/01/2014 Viste. 19/01/2014 Viste Le Viste Logiche o Viste o View possono essere definite come delle tabelle virtuali, i cui dati sono riaggregazioni.
Corso di Informatica (Basi di Dati)
1 Corso di Laurea in Biotecnologie Informatica (Basi di Dati) SQL: Data Manipulation Language (DML) Anno Accademico 2009/2010 Da: Atzeni, Ceri, Paraboschi,
Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill, 1999
Basi di dati Università Degli Studi Parthenope di Napoli
SQL: Lezione 7 Nataliya Rassadko
SQL Per la modifica di basi di dati
SQL Per la definizione di basi di dati SQL per definire ed amministrare Ogni utente puo definire una base di dati di cui diventa lamministratore potendo.
Esercitazione.
Equivalenza di espressioni
Vincoli di integrità generici Con i costrutti visti sinora, non è sempre possibile definire tutti i possibili vincoli di integrità. Per questo esiste listruzione.
Duplicati Lalgebra relazionale non ammette duplicati, SQL li ammette. Quindi select Città from Persona where Cognome= Rossi estrae una lista di città in.
Vincoli di integrità generici Con i costrutti visti sinora, non è sempre possibile definire tutti i possibili vincoli di integrità. Per questo esiste listruzione.
SQL SQL (pronunciato anche come l’inglese sequel) è l’acronimo di Structured Query Language (linguaggio di interrogazione strutturato) E’ un linguaggio.
Vincoli di integrità generici Con i costrutti visti sinora, non è sempre possibile definire tutti i possibili vincoli di integrità. Per questo esiste listruzione.
Manipolazione dei dati I comandi SQL che permettono di modificare il contenuto di una base di dati sono insertdeleteupdate insert ha la seguente sintassi:
SELECT STATEMENT Clausola WHERE permette di limitare il numero di record da estrarre SELECT */ [DISTINCT] colonna/ espressione [alias],… FROM table [WHERE.
Viste. Cosè una vista? è possibile creare un subset logico di dati o una combinazione di dati una vista è una tabella logica basata su una tabella o su.
Creazione e manipolazione tabelle. TABELLE una tabella può essere creata in qualsiasi momento,anche quando gli utenti stanno usando il database la struttura.
SQL basato su ANSI (American National Standards Institute) – standard SQL SQL – Structured Query Language è un linguaggio dichiarativo e permette di comunicare.
Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill, Capitolo 4:SQL 16/10/2002.
Basi di dati Claudia Raibulet
Corso di INFORMATICA anno scolastico 2009/10 Linguaggio SQL IDENTIFICATORI di tabelle e attributi: stringhe di lunghezza max 18 caratteri, composte da.
L’algebra relazionale
Corso di Basi di Dati Il Linguaggio SQL Home page del corso:
sql: esempi di linguaggio sql nell'implementazione mysql
1 Il Linguaggio SQL Il Linguaggio SQL Prof. Lorenzo Vita, Ing. Luigi Testa.
Basi di Dati e Sistemi Informativi
Basi di Dati e Sistemi Informativi Il Linguaggio SQL Home page del corso:
SQL.
BIOINFO3 - Lezione 51 INSERIMENTO DEI DATI Visto come si creano le tabelle (sinora tristemente vuote), cominciamo ad occuparci di come riempirle con dei.
CORSI DI FORMAZIONE - Basi di Dati: MySql - Parte 4 - Dicembre Utenti e privilegi del database - 1 Root è lutente amministratore predefinito, ma.
Informatica II – Basi di Dati (07/08) – Parte 2 Gianluca Torta Dipartimento di Informatica dell’Università di Torino
SEFOC – SETTORE FORMAZIONE CONTINUA DEL PERSONALE CORSO MYSQL AVANZATO ROBERTO PENNOLINO – CARMELO MASSIMO PRIOLO PALERMO – 07 | 06 | 2011.
Esercitazione 7.
SQL (IV) Data Definition Language/ Data Manipulation Language.
Database Esercizi > Progettazione Fisica > SQL
Il Linguaggio SQL. Le interrogazioni in SQL (continua…) La parte di SQL dedicata alla formulazione di interrogazioni fa parte del DML. SQL esprime le.
SQL, esempi 30/10/2014Basi di dati SQL1. 30/10/2014Basi di dati SQL2 CREATE TABLE, esempi CREATE TABLE corsi( codice numeric NOT NULL PRIMARY KEY, titolo.
Algebra relazionale (III). Esempi di Interrogazioni: 3 Trovare matricola e nome dei capi i cui impiegati guadagnano tutti più di Tutti gli impiegati?
Interazione col DB Per interagire con una base dati da una pagina PHP occorre procedere come segue: Eseguire la connessione al DBMS MySQL in ascolto;
1 Basi di Dati S tructured Q uery L anguage Appunti Matteo Longhi.
SQL (III) Data Definition Language/ Data Manipulation Language.
MySQL Database Management System
Database Elaborato da: Claudio Ciavarella & Marco Salvati.
1 Vincoli Ci sono i vincoli predefiniti ( unique, primary key, not null, foreign key … ) In SQL2 si ha anche check check Condizione Serve per dare condizioni.
Vincoli Interrelazionali Per i vincoli visti l’inserimento di un valore che li viola viene semplicemente impedito. In caso di vincoli di integrità referenziale,
Vincoli interrelazionali
Basi di dati I Prof.ssa Rosalba Giugno Prof. Alfredo Pulvirenti SQL: Amministrazione e Viste.
Raggruppamenti e target list scorretta select padre, avg(f.reddito), p.reddito from persone f join paternita on figlio = nome join persone p on padre =
Funzionalità del DBMS relazionale l Funzioni per –definizione della base di dati –inserimento / rimozione /aggiornamento di informazioni deve soddisfare.
Approfondimenti SQL.
Linguaggio SQL prima parte Linguaggio SQL prima parte A. Lorenzi, E. Cavalli INFORMATICA PER SISTEMI INFORMATIVI AZIENDALI Copyright © Istituto Italiano.
Linguaggio SQL. Linguaggi per database La diffusione del modello relazionale ha favorito l’uso prevalente di linguaggi non procedurali: in questo modo.
Esercizi SQL Group by. CREATE TABLE dipendente (codDip CHAR(8) NOT NULL UNIQUE PRIMARY KEY, cognome CHAR(60) NOT NULL, nome CHAR(60) NOT NULL, stipendio.
Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning C
Transcript della presentazione:

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

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.

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 NomeDataOrganizzatoreNumPartecipanti CONFERENZE  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 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.

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  Definire in SQL i seguenti domini: 1. Saldo : intero, compreso tra -200 e 200, valore di default pari a NomeUtente : stringa di max 10 caratteri, valore di default pari al nome dell’utente che esegue le operazioni di inserimento dati.

Esercizio 2  Definire in SQL i seguenti domini: 1. Saldo : intero, compreso tra -200 e 200, valore di default pari a 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

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

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

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.

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

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.

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.

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

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

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

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.

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

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.

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

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.

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

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.

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’

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.

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

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)

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.

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

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

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

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

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

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

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

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)

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

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

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.

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.

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.

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

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.

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.

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.

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 )

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.

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.

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

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

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

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.

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)

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.

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)

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”

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’

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.

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!

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!

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!

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.

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.

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)

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

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.

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 )

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 )

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)

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

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

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

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

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

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