σ data 15/12/2013 data 20/12/2014

Documenti analoghi
Lezione 8. Metadati, Viste e Trigger

Soluzione DDL ed Algebra Relazionale

Basi di dati: appello 08/03/06

Basi di Dati. S Q L Lezione 5

Esame Informatica Generale 13/04/2016 Tema A

2011 Politecnico di Torino 1

Basi di Dati 1 Prof. L. Tanca e F. A. Schreiber APPELLO DEL 9 SETTEMBRE 2015 Tempo: 2h30m

MEZZI CodM Tipo Targa AnnoI Assicurato

Il sistema informativo deve essere di tipo centralizzato e accessibile mediante un computer server installato nella rete locale dell albergo.

Esercitazione query in SQL L esercitazione viene effettuata sul database viaggi e vacanze che prevede il seguente modello E/R:

Nozione ed uso. Operazioni eseguite automaticamente ogni volta che avviene un certo evento Uso:

Nella relazione CINEMA, Nome è chiave secondaria. Nella relazione FILM, CodRegista, e CodProtagonista sono chiavi esterne sulla tabella PERSONE.

SQL PER LA DEFINIZIONE DI BASI DI DATI

SQL non è solo un linguaggio di interrogazione (Query Language), ma. Un linguaggio per la definizione di basi di dati (Data-definition language (DDL))

APPUNTI DELLA LEZIONE DI DATABASE DEL 26/10/2016 Studenti: Marco D'Amato, Adriano Luigi Piscopello Professore: Mario Bochicchio

Esempio di database relazionale con l utilizzo del prodotto MySQL

Capitolo 7. Esercizio 7.1

DUE GRUPPI DI COMANDI

Il linguaggio SQL: trigger. Versione elettronica: 04.7.SQL.trigger.pdf

PL/SQL PL/SQL. Ordine degli elementi dei triggers di Oracle. Differenze nei triggers. Versione dei trigger e PSM di Oracle

Corso di Basi di Dati

SQL e ACCESS. Modello relazionale PROBLEMA ENTITA STUDENTE

Suggerimenti per lo Sviluppo delle Applicazioni con PL/SQL. Simona Rotolo

Basi di Dati Prof. L. Tanca e F. A. Schreiber APPELLO DEL 12 FEBBRAIO 2015 PARTE 1

Vincoli e Triggers. Vincoli. Tipo di vincoli. Chiavi esterne

Per poter interagire con un database in rete mediante uno script php bisogna. innanzitutto cerare una connessione. Ciò si ottiene mediante la funzione

STUDIO. Esercizi proposti a lezione cap. 3 rev. dic da Ulmann, Widom Introduzione ai database. indirizzo. titolo. nome. recitain. attori.

SQL e algebra relazionale

SQL. Structured Query Language 1974: SEQUEL by IBM 1981: SQL by IBM : SQL ISO 9075:1992 SQL:1999 SQL:2003

CONCETTO DI ANNIDAMENTO

1. Per ogni film in cui appaiono solo attori nati prima del 1970 restituire il titolo del film.

BASI DATI: algebra relazionale

VIDES. Mariagrazia Rossi

Basi di Dati 1 Prof. L. Tanca e F. A. Schreiber APPELLO DEL 21 LUGLIO 2015 Tempo: 2h30m

Triggers. Basi dati attive. Trigger. Indipendenza della conoscenza

DBMS (Data Base Management System)

Il linguaggio SQL: viste e tabelle derivate

ESERCITAZIONE 4 Giovedì 13 novembre 2014 (3 ore) SQL

cliente... nuovo cliente trasloco

Storia. Corso di Basi di Dati Spaziali. Componente DDL. Funzionalità. Esempio. Creazione di schema. Linguaggi: SQL. Storia:

Esprimere in algebra (ottimizzata), calcolo relazionale la seguente query:

Il linguaggio SQL: viste e tabelle derivate. Versione elettronica: SQLd-viste.pdf

Azioni. Select e join non consentono di modificare il contenuto del DB. Inserzione di nuovi dati. Azioni desiderate. Aggiornamento di dati

SQL terza parte D O C E N T E P R O F. A L B E R T O B E L U S S I. Anno accademico 2010/11

V. Moriggia Modelli di Base Dati. Modelli di Base Dati. a.a. 2001/

Logout [ e01692 ] FAQ Cerca Iscritti Pannello di Controllo Utente. Ultimo accesso: ieri, 8:07 Oggi è 07/04/2009, 9:44

Abilità Informatiche A.A. 2010/2011 Lezione 9: Query Maschere Report. Facoltà di Lingue e Letterature Straniere

Basi di dati. Il Linguaggio SQL. K. Donno - Il Linguaggio SQL

DATABASE PER IL WEB. Programmazione Web 1

a.a. 2012/13 12 Novembre 2012 Preparazione al Test in itinere, Compito A 1. Modellare tramite uno schema entità- relazione la seguente base di dati:

Capitolo 4. Soluzione: Soluzione: Create domain STRING as character varying (256) default sconosciuto not null

SELECT FROM ORDER BY SELECT FROM ORDER BY DESC DESC SELECT FROM ORDER BY DESC DESC SELECT FROM WHERE SELECT FROM WHERE AND SELECT FROM WHERE AND

Basi di dati e sistemi informativi I

Esercitazione: Il DBMS MySQL

Basi di Dati. Oracle SQLPLUS - Esercitazione n. 2 Passi preliminari per lo svolgimento delle esercitazioni

LABORATORIO di INFORMATICA

SISTEMI OPERATIVI, RETI, INTERNET

DDL, VINCOLI D INTEGRITÁ, AGGIORNAMENTI E VISTE. SQL è più di un semplice linguaggio di interrogazione

SQL (STRUCTURED QUERY LANGUAGE)

INTRODUZIONE AD SQL (CAPITOLO 4) R. Basili a.a

PROGRAMMA DI CLASSE 5AI

Il linguaggio SQL: query innestate

SQL: definizione schema

Corso di INFORMATICA

Basi di Dati. Esercitazione 3: Interrogazioni in SQL. K. Donno - Interrogazioni in SQL

Esercitazione di riepilogo sulle Query MySQL Giugno 2011 Classe VB Informatica

Cap. 5 Basi di dati attive

Il BACKUP è disponibile in

SQL [2] Concetti avanzati di SQL. Esempi di interrogazioni

Istruzioni SQL 1. Query di selezione 2 Istruzione SELECT 2 Istruzione SELECT DISTINCT 2 ORDER BY 3 WHERE 3 La condizione LIKE 4 BETWEEN AND 5

Esercitazione su SQL

SQL Server. SQL server e un RDBMS di tipo client/server che utilizza Transact-SQL per gestire la comunicazione fra un client e SQL Server

PHP e Structured Query Language

CORSO di INFORMATICA e ARCHIVIAZIONE

INTRODUZIONE ALLE BASI DATI RELAZIONALI

Esercizi SQL. Dato il seguente schema di una base di dati dove gli attributi che compongono la chiave sono scritti in grassetto

Basi di Dati: Corso di laboratorio

Oracle PL/SQL. Motivazioni

Argomenti Corso SAP Online ABAP Completo

TRIGGER Regole Attive (Trigger) OLD_TABLE NEW_TABLE old new

Tool. Basi di Dati e Sistemi Informativi Prof. Marco Di Felice Dott.sa Sara Zuppiroli A.A

Data Base. Master "Bio Info" Reti e Basi di Dati Lezione 6

Data management a.a Il linguaggio SQL

Prova Scritta di Basi di Dati

SQL Sintassi Dei Comandi

Si considerino le seguenti specifiche relative alla realizzazione di un sistema informativo per la gestione di un sito di blog.

Basi di dati (8) Docente: Andrea Bulgarelli. Università di Modena e Reggio Emilia. andrea.bulgarelli@gmail.com Argomento: trigger e cursori (1.

Basi di Dati Corso di Laura in Informatica Umanistica

SQL. Il nome sta per Structured Query Language Le interrogazioni SQL sono dichiarative

ISTITUTO DI ISTRUZIONE SUPERIORE Cigna Baruffi Garelli

Prova Scritta di Basi di Dati

Alessandra Raffaetà. Esercizio

ISTITUTO DI ISTRUZIONE SUPERIORE Cigna Baruffi Garelli

CREATE TABLE Nome ( Attributo Tipo [Vincolo {, Vincolo }] {, Attributo Tipo [Vincolo {, Vincolo }]} [, VincoloDiTabella {, VincoloDiTabella}] )

Misure. Definizione delle misure

1 Database universitario 1.1 Elenco tabelle PERSONA (ID, is_studente, is_docente, nome, cognome) STUDENTE (matricola, persona references persona(id))

SQL (STRUCTURED QUERY LANGUAGE)

ESEMPIO: RITARDI & BIGLIETTI

I comandi del linguaggio DDL (Data Definition Language): CREATE E ALTER

Biglietti e Ritardi: schema E/R

Transcript:

Dato lo schema: Basi di Dati Prof. Alfredo Pulvirenti A.A. 2014-2015 Prova in itinere 18 dicembre 2014 (A) EVENTO(id, titolo, data, categoria, costo_partecipazione, idcatering) ORGANIZZATORE(id,idevento) PERSONA(id, nome, cognome, provincia_residenza) PARTECIPANTE(idevento,idpersona) CATERING(idcompagnia,nome,descrizione) CATEGORIAEVENTO(id,descrizione) 1. Identificare le chiavi primarie ed esterne dello schema. Le chiavi primarie sono sottolineate in modo continuo quelle esterne sono sottolineate in modo tratteggiato. Si noti che se si suppone che un evento ha un unico organizzatore allora la relazione ORGANIZZATORE ha come chiave primaria solo idevento. 2. Scrivere in algebra relazionale le seguenti query Per risolvere le query useremo le relazioni con un nome abbreviato. E ß EVENTO O ß ORGANIZZATORE P ß PERSONA PA ß PARTECIPANTE C ß CATERING CE ß CATEGORIAEVENTO Useremo la notazione puntata per distinguere due campi con lo stesso nome in relazioni differenti. a. Trovare nome e cognome dei partecipanti agli eventi tenuti tra il 15 e il 20 dicembre 2013 π nome,cognome (P id=p.idpersona PA idevento=id σ data 15/12/2013 data 20/12/2014 b. Trovare la persona che ha partecipato a tutti gli eventi di tipo Festa Laurea. δ id idevento (PA) π E.id (σ descrizione='festalaurea' (E E.categoria=CE.id CE)) c. Trovare le persone che hanno partecipato a tutte le categorie di eventi. δ id categoria (π idpersona,categoria (PA idevento=id E)) π id (CE) d. Trovare le persone che non hanno mai organizzato un evento di tipo Matrimonio.

π id (O) π O.id (O O.idevento=E.id E E.categoria=CE.id σ descrizione='matrimonio' (CE)) 3. Scrivere in SQL le seguenti query: a. Trovare gli eventi che hanno avuto il maggiore incasso. SELECT sum(costo_partecipazione) incasso, EVENTO.id group by EVENTO.ID HAVING incasso = (SELECT max(incasso) FROM (SELECT sum(costo_partecipazione) incasso, EVENTO.id GROUP BY EVENTO.ID)) e) b. Trovare gli eventi che hanno avuto il minor numero di partecipanti nel 2013. SELECT count(*) num_partecipanti, EVENTO.id AND year(evento.data) = 2013 GROUP BY EVENTO.id HAVING count(*) = (SELECT min(num_partecipanti) FROM (SELECT count(*) num_partecipanti, EVENTO.id AND year(evento.data) = 2013 GROUP BY EVENTO.id) t ) c. Scrivere un trigger usando la sintassi Oracle che per ogni partecipate iscritto ad un evento incrementi il numero di partecipanti di una tabella Partecipanti(idevento,totale_partecipanti). CREATE TRIGGER T1 AFTER INSERT ON PARTECIPANTI FOR EACH ROW DECLARE X number; select count(*) into X from partecipanti IF X = 0 THEN insert into partecipanti values(new.idevento,1); ELSE select totale_partecipanti into X from partecipanti update partecipanti set totale_partecipanti = X+1 ENDIF; END; d. Trovare le persone che hanno partecipato a tutti gli eventi organizzati da un organizzatore di Catania. SELECT * FROM persone p FROM organizzatore o, persona o.id = persona.id AND persona.provincia_residenza = CT AND NOT EXISTS (SELECT * FROM partecipante pa WHERE pa.idpersona=p.id AND pa.idevento=o.idevento)) e. Supponendo che le coppie di persone che hanno partecipato allo stesso evento siano amici. Trovare le coppie di persone che non sono amiche ma sono connesse da una catena di amici comuni.

CREATE VIEW amici AS SELECT p1.idpersona as amico1,p2.idpersona as amico2 FROM partecipante p1, partecipante p2 WHERE p1.idpersona > p2.idpersona AND p1.idevento = p2.idevento with recursive nonamici(amicox,amicoy) AS ( select amico1, amico2 from amici union all select A.amicoX, amico2 from nonamici A, amici where D.amicoY = amico1) select * from nonamici na FROM amici WHERE na.amicox=amico1 AND na.amicoy=amico2) f. Definire un vincolo di integrità che consenta di non inserire come partecipante l organizzatore di una festa. ALTER TABLE partecipante ADD CONSTRAINT mycheckconstraint CHECK(NOT EXISTS (SELECT * FROM organizzatore WHERE id = idpartecipante)); Si noti che la soluzione non consente di inserire come partecipante una persona che risulta organizzatore di un evento anche DIVERSO da quello per cui si sta effettuando l inserimento. Per superare a tale limite si può inserire un altra condizione. ALTER TABLE partecipante ADD CONSTRAINT mycheckconstraint CHECK(NOT EXISTS (SELECT * FROM organizzatore o WHERE id = idpartecipante AND o.idevento=idevento));

Basi di Dati Prof. Alfredo Pulvirenti A.A. 2014-2015 Prova in itinere 18 dicembre 2014 (B) Dato lo schema: PERSONA(id, nome, cognome, provincia_residenza,stato_civile) ORGANIZZATORE(id,idevento) PARTECIPANTE(idevento,idpersona) CATERING(idcompagnia,nome,descrizione,sede) CATEGORIAEVENTO(id,descrizione) EVENTO(id, titolo, data, categoria, costo_partecipazione, idcatering) 1. Identificare le chiavi primarie ed esterne dello schema per le chiavi primarie ed esterne (la presenza dell attributo stato_civile in questo schema non ha effetto sulle chiavi). Vedi compito a per le relazioni abbreviate negli esercizi di Algebra Relazionale 2. Scrivere in algebra relazionale le seguenti query. a. Trovare nome e cognome dei partecipanti agli eventi che non si sono tenuti tenuti tra il 15 e il 20 ottobre 2009 π nome,cognome (P id=p.idpersona PA idevento=id σ data 15/10/2009 data 20/10/2013 b. Trovare le persone che hanno partecipato a tutte categorie di eventi. Vedi punto C compito A c. Trovare le persone che non hanno mai organizzato un evento di tipo Compleanno. π id (O) π O.id (O O.idevento=E.id E E.categoria=CE.id σ descrizione='compleanno' (CE)) d. Trovare le persone che hanno partecipato a tutti gli eventi del 2013. δ id idevento (PA) π id (σ data 1/1/2013 data 31/12/2013

3. Scrivere in SQL le seguenti query: a. Trovare gli eventi che hanno avuto il minor incasso. SELECT sum(costo_partecipazione) incasso, EVENTO.id group by EVENTO.ID HAVING incasso = (SELECT min(incasso) FROM (SELECT sum(costo_partecipazione) incasso, EVENTO.id, GROUP BY EVENTO.ID)) e) b. Trovare gli eventi Laurea che hanno avuto il maggior numero di partecipanti sposati. SELECT count(*) num_partecipanti, Evento.id AND stato_civile= coniugato GROUP BY EVENTO.id HAVING count(*) = (SELECT max(num_partecipanti) FROM (SELECT count(*) num_partecipanti, EVENTO.id FROMx EVENTO,PARTECIPANTE AND stato_civile= coniugato GROUP BY EVENTO.id) t ) c. Trovare le persone che hanno partecipato a tutti gli eventi organizzati da un organizzatore di Roma. SELECT * FROM persone p FROM organizzatore o, persona o.id = persona.id AND persona.provincia_residenza = RM AND NOT EXISTS (SELECT * FROM partecipante pa WHERE pa.idpersona=p.id AND pa.idevento=o.idevento)) d. Definire un vincolo di integrità che consenta di non inserire come partecipante l organizzatore di una festa. e. Creare una vista che contenga le coppie distinte di persone che hanno partecipato allo stesso evento di tipo compleanno. Supponendo che tali coppie di persone siano amici. Trovare le coppie di persone che non sono amiche ma sono connesse da una catena di amici comuni. f. Scrivere un trigger usando la sintassi Oracle che per ogni partecipate iscritto ad un evento incrementi il numero di partecipanti di una tabella Partecipanti(idevento,totale_partecipanti).